ImportError: нет модуля с именем clr при использовании CPython из python.org

Я пишу код C++, который должен вызывать сценарии Python внизу. Для этого я использую cpython python.org. Некоторые из скриптов python выполняют код .net с помощью python для .net, и когда дело доходит до .net, все это терпит неудачу. Я попытался создать тестовое приложение, чтобы проверить, где оно терпит неудачу, и обнаружил, что оно не может импортировать модуль clr.

Когда я запускаю этот код, он дает мне ImportError: нет модуля с именем clr

Py_Initialize();
PyRun_SimpleString("import clr");

Если я захожу в консоль Python и набираю «import clr», все работает нормально. Я также проверил sys.path, и он содержит папку, в которой clr.pyd находится «C:\Python27\DLLs». Я также попытался установить этот путь на С++:

char* path = "C:\\Python27\\dlls";
Py_Initialize();
PySys_SetArgv(1, &path);
char* phome = Py_GetPythonHome();

Но это не помогло. Кроме того, я не понимаю, почему модуль clr отображается как clr.pyd, а не .pyc, как другие скомпилированные модули.

Может ли кто-нибудь объяснить, почему import clr не работает через CPython? Можно ли заставить его работать?


person y_d    schedule 31.10.2014    source источник


Ответы (4)


Чтобы установить clr, вам необходимо установить библиотеку pythonnet.

Вы можете установить pythonnet, используя следующую команду.

 pip install pythonnet
person jatinkumar patel    schedule 04.02.2015
comment
Работал на меня. Спасибо! - person Davidson Lima; 04.01.2018

Вам нужно вызвать PySys_SetArgv после Py_Initialize соответствующим образом, чтобы изменить системный путь.

person mic4ael    schedule 31.10.2014
comment
Пробовал, но безрезультатно. Я обновил свой пост с более подробной информацией. - person y_d; 02.11.2014

Я работаю за прокси-сервером с несколькими версиями 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
person Bill Kidd    schedule 05.03.2018

Эта ошибка чаще всего вызвана наличием нескольких установок Python, которые могут (или не могут) быть частью вашей (Windows) переменной system PATH. Когда вы запускаете Powershell, он будет использовать этот PATH в зависимости от:

  1. Размещение заказа в (Windows) System PATH.
    (Ваш Python3.7 предшествует Python3.8?)
  2. Если у вас установлены другие интерпретаторы Python, такие как:
    conda, miniconda3 и т. д., у которых есть свои пути.

Затем, когда вы сделаете pip install pythonnet, пакет будет установлен в расположение системного пакета, в зависимости от того, какой pip вы используете. Свяжитесь с pip -V.

Например:
Если вы обнаружите, что ваша оболочка по умолчанию начинается с 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)
person not2qubit    schedule 12.11.2020