ImportError:使用python.org的CPython时没有名为clr的模块

时间:2014-10-31 18:58:07

标签: python .net clr cpython python.net

我正在编写应该调用下面的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失败了吗? 是否有可能使其有效?

4 个答案:

答案 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,具体取决于:

  1. 在(Windows)系统 PATH中的订单位置。
    (您的 Python3.7 是否先于 Python3.8 ?)
  2. 如果您安装了其他Python解释器,例如:
    condaminiconda3等,它们都有自己的路径。

然后,当您执行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)