我正在编写应该调用下面的python脚本的C ++代码。 为此,我使用python.org的cpython。 一些python脚本在python for .net的帮助下执行.net代码,当涉及.net时,所有这些都失败了。 我尝试构建测试应用程序以验证它失败的位置,并发现它无法导入clr模块。
当我运行此代码时,它会给我ImportError:没有名为clr的模块
Py_Initialize();
PyRun_SimpleString("import clr");
如果我去python控制台并键入" import clr"一切正常。 我还检查了sys.path,它包含clr.pyd所在的文件夹' C:\ Python27 \ DLLs'。 我也尝试通过以下方式在C ++中设置此路径:
char* path = "C:\\Python27\\dlls";
Py_Initialize();
PySys_SetArgv(1, &path);
char* phome = Py_GetPythonHome();
但它没有帮助。另外,我不明白为什么clr模块显示为clr.pyd而不是.pyc,就像其他编译模块一样。
有人可以解释为什么导入clr通过CPython失败了吗? 是否有可能使其有效?
答案 0 :(得分:9)
要安装clr,您必须安装pythonnet库。
您可以使用以下命令安装pythonnet。
pip install pythonnet
答案 1 :(得分:1)
您需要在PySys_SetArgv
之后适当地调用Py_Initialize
以更改syspath。
答案 2 :(得分:0)
我在具有多个python版本的代理服务器后面工作。 我有一个bat文件,当我需要一个新模块或希望更新现有模块时我会更新。 第一行设置我希望更新的版本的路径 bat文件从scripts目录运行。 代理IP与端口" 9.254.0.1:81"
SET path="C:\Programs\Python\Python3_64"
pip install --proxy="9.254.0.1:81" --upgrade pip
pip install --proxy="9.254.0.1:81" pythonnet
答案 3 :(得分:0)
此错误最常见的原因是由于安装了多个Python安装程序,这些安装程序可能(也可能不)是您的一部分(Windows)系统 PATH 。启动Powershell时,它将使用该PATH,具体取决于:
conda
,miniconda3
等,它们都有自己的路径。然后,当您执行pip install pythonnet
时,该软件包将安装在系统软件包的位置,具体取决于您所使用的点。检查pip -V
。
例如:
如果您发现默认外壳程序以conda
为 activated 激活,则需要先进行conda deactivate
的操作,然后再进行pip install
的操作。
(base) $ pip -V
pip 20.2.4 from c:\users\xxxx\miniconda3\lib\site-packages\pip (python 3.7)
(base) $ conda deactivate
$ pip -V
pip 20.2.4 from c:\python38\lib\site-packages\pip (python 3.8)