簡體   English   中英

導入錯誤:使用 python.org 的 CPython 時沒有名為 clr 的模塊

[英]ImportError: No module named clr when using CPython of python.org

我正在編寫 C++ 代碼,它應該在下面調用 python 腳本。 為此,我使用 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 。

有人可以解釋為什么導入 clr 會通過 CPython 失敗嗎? 有沒有可能讓它發揮作用?

要安裝 clr,您必須安裝 pythonnet 庫。

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

 pip install pythonnet

您需要在PySys_SetArgv之后適當地調用PySys_SetArgv以更改系統Py_Initialize

我在具有多個版本的 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

此錯誤最常見的原因是多個 Python 安裝可能(也可能不)是您 (Windows)系統PATH變量的一部分。 當您啟動 Powershell 時,它將使用該 PATH,具體取決於:

  1. (Windows)系統路徑中的訂單放置。
    (你的Python3.7Python3.8之前嗎?)
  2. 如果您安裝了其他 Python 解釋器,例如:
    condaminiconda3等,都有自己的路徑。

然后當您執行pip install pythonnet ,該軟件包將安裝在系統軟件包位置,具體取決於您使用的 pip。 檢查pip -V

例如
如果您發現默認 shell 以激活conda開頭,則需要在執行pip install之前執行conda deactivate

(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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM