8

我正在编写应该在下面调用 python 脚本的 C++ 代码。为此,我使用 python.org 的cpython。一些 python 脚本在 python for .net 的帮助下执行 .net 代码,而当涉及到 .net 时,这一切都失败了。我尝试构建测试应用程序以验证它失败的地方,发现它无法导入 clr 模块。

当我运行此代码时,它给了我 ImportError: No module named 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 像其他编译模块一样。

有人可以解释为什么 import clr 通过 CPython 失败?有可能让它工作吗?

4

4 回答 4

13

要安装 clr,您必须安装 pythonnet 库。

您可以使用以下命令安装 pythonnet。

 pip install pythonnet
于 2015-02-04T09:57:11.143 回答
1

您需要适当地调用PySys_SetArgvPy_Initialize更改系统路径。

于 2014-10-31T20:26:50.513 回答
1

我在具有多个版本的 python 的代理服务器后面工作。当我需要一个新模块或希望更新现有模块时,我有一个更新的 bat 文件。第一行设置我希望更新的版本的路径 bat 文件从脚本目录运行。端口为“9.254.0.1:81”的代理 IP

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
于 2018-03-05T15:01:20.203 回答
0

此错误通常是由多个 Python 安装引起的,这些安装可能(或可能不)是您 (Windows)系统 PATH变量的一部分。当您启动 Powershell 时,它将使用该 PATH,具体取决于:

  1. (Windows)系统路径中的订单放置。
    (你的Python3.7是在Python3.8之前出现的吗?)
  2. 如果您安装了其他 Python 解释器,例如:
    condaminiconda3等,它们都有自己的路径。

然后,当您这样做时pip install pythonnet,该软件包将安装在系统软件包位置,具体取决于您使用的 pip。检查与pip -V

例如
如果你发现你的默认 shell 以conda 激活开始,你需要在你做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)
于 2020-11-12T14:40:49.010 回答