欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > objectArx2016使用python3.9.7配置实践

objectArx2016使用python3.9.7配置实践

2025/2/12 9:22:49 来源:https://blog.csdn.net/qq_41449986/article/details/145572208  浏览:    关键词:objectArx2016使用python3.9.7配置实践

写在前面: 笔者有一些python代码, 需要结合到cad二次开发的项目中,并使用embed版本进行发布.记录一下配置过程,并加些分析,以备后期查用.

ObjectArx配置Python

  • 零 着重提醒
  • 一 Python安装版本和embed版本
    • 1.1 下载
    • 1.2 安装版本的设置
      • 1)安装参数设置
      • 2)安装版本Python内重要文件
    • 1.3 embed版本的设置
      • 1) 下载embed版本,解压缩
      • 2) embed版本设置(python39._pth)
  • 二 "安装版本"中的几个路径
    • 2.1 安装版本的几个路径
      • 1) 环境变量Path中Python的路径
      • 2) "安装版本"的第三方安装模块路径
  • 三 使用虚拟环境 virutalenv来配置embed
    • 3.1 在"安装版本"下安装virtualenv和virutalenvwrapper-win
    • 3.2 使用虚拟环境
      • 1)新建目录
      • 2)设置环境变量 WORKON_HOME
      • 3)新建环境
      • 4)新建环境后会自动进入虚拟环境,安装numpy
      • 5) 将embed-python中的内容拷贝到"python397"目录中
  • 四 Vs2012配置两个arx项目
    • 4.0 使用Vs中ObjectArx wizard新建两个dll文件
    • 4.1 设置环境变量_putenv

零 着重提醒

1.了解 "安装版python"路径和"安装版python"的第三方模块路径
2.virtualenv virtualenvwrapper-win 新建虚拟环境
3.修改"embed版本python"的 "python._pth"文件
4.将3中修改后的"embed"拷贝到虚拟环境中,组成发行版
5.新建两个arx程序, pyArxEnter负责设置Paht和加载pyArx

一 Python安装版本和embed版本

1.1 下载

pyhon下载连接: Python.org
笔者使用的是3.9.7
在这里插入图片描述

使用"安装版本",是方便配置embed版本.

1.2 安装版本的设置

1)安装参数设置

参数
安装路径C:\Program Files\Python39
Add to Path勾选影响windows环境变量PATH
Debug配置未选是否有 python39_d.lib(未实践)

2)安装版本Python内重要文件

Python程序内重要文件C:\Program Files\Python39影响配置
Python.h.\includevs2012–项目属性-附加头文件目录
Python39.lib.\libsvs2012–项目属性-附加库文件目录 和 附加依赖项
python39.dll.\运行时.要设置环境变量 PATH=C:\Program Files\Python39;%PATH%

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.3 embed版本的设置

1) 下载embed版本,解压缩

embed版本没有的东西
1没有 include文件夹
(自然也没有python.h)
2没有 libs文件夹
(自然也没有python39.lib)
3没有 Lib\site-packages 文件夹
使用了 .\python39.zip表示模块库
embed版本有的东西
1只有python39.dll文件.
因此编译C++项目时,确实是需要"安装版本python"中的python.h python39.lib
而embed版本仅仅用来发行.embed版本有python39.dll

2) embed版本设置(python39._pth)

这段主要用来方便未来在"embed版本"中安装第三方库
操作步骤:在embed-python中python39._pth 新增路径
.\Lib\site-packages(见下图)
在这里插入图片描述
这个路径是告诉 embed的python以后第三方库也到 .\Lib\site-package中找

二 "安装版本"中的几个路径

2.1 安装版本的几个路径

1) 环境变量Path中Python的路径

系统环境变量Path应该设置为:
Path=C:\Program Files\Python39;C:\Users\%User%\AppData\Roaming\Python\Python39\Scripts;…其他路径…

1.Python程序根目录C:\Program Files\Python39\cmd执行Python.exe必要路径
2.PythonScript目录C:\Users\%User%\AppData\Roaming\
Python\Python39\Scripts
cmd执行如workon.bat时必要路径

如果没有设置上面的路径造成的后果

  1. cmd命令行下,输入python没有响应
  2. cmd无法执行安装第三方工具时的路径.
    下图演示了设置位置
    在这里插入图片描述

2) "安装版本"的第三方安装模块路径

第三方模块安装路径
早期Python安装路径下的 Lib\site-packages
C:\Program Files\Python39\Lib\site-packages
后期(3.9.7也这样)放到了用户目录下的
C:\Users\%User%\AppData\Roaming\Python\Python39\Scripts

所以以上目录都需要设置系统环境变量Path,以保证cmd时能正确执行命令

三 使用虚拟环境 virutalenv来配置embed

3.1 在"安装版本"下安装virtualenv和virutalenvwrapper-win

pip install virtualenv
pip install virtualenvwrapper-win

virtualenvwrapper-win的使用方法

3.2 使用虚拟环境

1)新建目录

d:\Code\python_envs\

2)设置环境变量 WORKON_HOME

set WORKON_HOME=d:\Code\python_envs
未来所有虚拟环境都在这个目录下.
注意: 这个目录也只有 Lib\site-package等会变动的东西,其他固定不变的,还是使用原始"安装程序"内的东西.

3)新建环境

新建环境python397

c:\>mkvirtualenv python397

D盘中就出现目录:
d:\Code\python_envs\python397\

4)新建环境后会自动进入虚拟环境,安装numpy

在虚拟环境python397中安装numpy

(python397)c:\>pip install numpy

特别注意:如果使用下列命令切换时,找不到workon.bat时,应该看下"2.1安装版本的几个路径"这个章节.

c:\>workon python397

5) 将embed-python中的内容拷贝到"python397"目录中

"embed版本"解压缩出来的所有文件(注意要修改过 python39._pth后的),拷贝到虚拟环境"python397"目录中,
这样通过虚拟环境和"embed版本"组成了最后的发行包.

四 Vs2012配置两个arx项目

未来发布的arx程序是安装到用户的电脑中的,所以不会要求用户安装python.因此我们需要以下两个arx
在这里插入图片描述

pytArxEnter配置 Path环境路径
pytArx用来调用Python函数的arx文件

4.0 使用Vs中ObjectArx wizard新建两个dll文件

主要是可以快速的设置各种ObjectArx的头文件和库文件路径

4.1 设置环境变量_putenv

virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;_putenv("PATH=d:\\Code\\python_envs\\python397;%PATH%"); Loader load;load.Do();return (retCode) ;}bool Loader::Do()// 加载指定ARX模块 
{const wchar_t* arxPath = L"d:\\Code\\CodeTest\\arx\\Zx\\x64\\Release\\zxpyArx.arx";  // ARX文件完整路径 AcRxDynamicLinker* pLinker = acrxDynamicLinker;bool es = pLinker->loadModule(arxPath, true);// 检查模块是否已加载 if (!es) {acutPrintf(_T("\n错误:无法加载ARX文件 (错误码 %d)"), es);return false;} else {acutPrintf(_T("\nARX模块加载成功"));return true;}}

4.2 pytArx 调用 python
新建一个MyMy命令 调用一下函数

std::wstring pyTest::test()
{std::wostringstream out;// 指向嵌入式Python目录 Py_SetPythonHome(L"d:\\Code\\python_envs\\python397");  // 初始化Python环境 Py_Initialize();if (!Py_IsInitialized()) {out <<  L"Failed to initialize Python.";return out.str();}// 初始化Numpy import_array();// 执行Python代码:创建Numpy数组 PyRun_SimpleString("import numpy as np\n""arr = np.array([1,  2, 3])\n""print('Numpy array:', arr)");// 从Python全局命名空间获取数组对象 PyObject* main_module = PyImport_AddModule("__main__");PyObject* global_dict = PyModule_GetDict(main_module);PyObject* arr = PyDict_GetItemString(global_dict, "arr");// 转换为C++数据类型 if (arr && PyArray_Check(arr)) {PyArrayObject* np_arr = (PyArrayObject*)arr;int* data = (int*)PyArray_DATA(np_arr);int length = 3;out << L"\nC++ received array: ";for (int i = 0; i < length; ++i) {out << data[i] << L" ";}out << std::endl;}else {out << L"Failed to retrieve numpy array." << std::endl;}// 清理资源 Py_DECREF(arr);Py_Finalize();return out.str();}   

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com