#python #pip #python-venv #modulenotfounderror #pyvenv
#python #pip #python-venv #ошибка modulenotfounderror #pyvenv
Вопрос:
Я пытаюсь создать переносимый venv на своей флешке, чтобы скопировать и вставить его кому-нибудь, чтобы ему не нужно было устанавливать python на ПК для запуска моего скрипта python. Я попытался найти здесь решение, но, возможно, потому, что я новичок в python и средах, я не могу найти правильный ответ.
Я установил Python версии 3.9.1 с веб-сайта в свою папку (Python) и создал с его помощью среду:
Pythonpyverpy391python -m venv pyenv
запуск where
в venv показывает:
(pyenv) D:CD_InhaltUpperLimb>where python
D:CD_InhaltUpperLimbPythonpyenvScriptspython.exe
запуск моего скрипта показывает ошибку:
(pyenv) D:CD_InhaltUpperLimb>UpperLimb.py
Traceback (most recent call last):
File "D:CD_InhaltUpperLimbUpperLimb.py", line 11, in <module>
import c3d
ModuleNotFoundError: No module named 'c3d'
Но я знаю, что я установил c3d:
(pyenv) D:CD_InhaltUpperLimb>pip list
Package Version
--------------- ---------
appdirs 1.4.4
c3d 0.3.0
certifi 2020.12.5
chardet 4.0.0
...
На этом компьютере не установлен Python. Запуск печати (sys.path) показывает следующее:
(pyenv) D:CD_InhaltUpperLimb>python
Python 3.9.1 (tags/v3.9.1:1e5d33e, Dec 7 2020, 17:08:21) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', 'D:\CD_Inhalt\UpperLimb\Python\pyver\py391\python39.zip', 'D:\CD_Inhalt\UpperLimb
\Python\pyver\py391\DLLs', 'D:\CD_Inhalt\UpperLimb\Python\pyver\py391\lib',
'D:\CD_Inhalt\UpperLimb\Python\pyver\py391', 'D:\CD_Inhalt\UpperLimb\Python\pyenv',
'D:\CD_Inhalt\UpperLimb\Python\pyenv\lib\site-packages']
Итак, где я допустил ошибку? Я в замешательстве. Буду признателен за любую помощь 🙂
Приветствую
Редактировать 1: как упоминал об этом Хефлинг. Если я напишу python UpperLimb.py
, это сработает. Как я могу запустить его напрямую как исполняемый файл? Без python
before?
Комментарии:
1. Может быть проблема; попробуйте запустить
python UpperLimb.py
вместо скрипта напрямую как исполняемый файл. Если это работает, и вы хотите иметь возможность вызыватьUpperLimb.py
напрямую, добавьте его содержимое в вопрос.
Ответ №1:
Это XY-проблема. Позвольте мне сначала рассказать, как вы можете решить свою проблему, а затем объяснить в приложении, в чем причина проблем, с которыми вы столкнулись.
1) Решение проблемы: создание переносимого приложения
Ваша первоначальная проблема в первом абзаце: вы хотите поделиться своим скриптом / приложением на python с кем-то, а не заставлять пользователя устанавливать python. Виртуальные среды не являются решением вашей проблемы. Хотя они являются частью решения, поскольку любая разработка приложений должна выполняться в виртуальной среде, чтобы сделать ваши проекты изолированными. Виртуальные среды не являются переносимыми; они зависят от установки python на компьютере, на котором они были созданы.
Если вы хотите поделиться своим кодом, у вас есть три разных варианта
(1) Создание и выполнение
Многим людям нравится использовать такие инструменты, как cx_Freeze, pyinstaller или Nuitka, для создания исполняемого файла из кода python. Однако есть ошибки. Эти инструменты довольно хорошо работают с простыми приложениями, но могут быть проблемой с более крупными и сложными приложениями, которые используют много статических файлов, модулей расширения (.dll) или зависят от __file__
атрибута модуля для доступа к файлу в файловой системе. Просто выполните простой поиск в SO с помощью toolname, чтобы увидеть несколько примеров.
(2) Совместное использование кода с переносимым python
Существуют переносимые версии python. Например, WinPython или встраиваемый Python из Python.org . Вы можете упаковать их в свой код приложения и простой .bat
файл, который запускает python.exe myscript
(используя относительные пути). Если у вас есть внешние зависимости (некоторые пакеты), вы можете включить их .whl
файлы (загрузить из PyPI) и .bat
также установить их. Я успешно делал это ранее с очень сложными программами на Python и передавал свои программы конечным пользователям, которые понятия не имеют о python. Однако это требует немного усилий и ручной работы.
(3) Использование pynsist
Альтернативным подходом было бы использовать pynsist для работы. Он используется для распространения приложений на Python, но не создает ни одного «myapp.exe «. То, что он делает, в основном автоматизирует «совместное использование кода с portable python». Он также создает программу установки, которую вы можете просто передать своим друзьям для использования, и установленная программа будет видна в меню «Пуск» Windows и установленных приложениях. Он даже создает ярлык, и вашим пользователям никогда не придется самим устанавливать python или даже знать, что ваше приложение создано с помощью Python.
Приложение
Некоторые объяснения ваших проблем, с которыми вы столкнулись.
A1) О запуске скрипта python
При запуске скрипта на Python обычно вводится python myscript.py
. Что происходит, так это то, что ваша ОС (Windows) будет искать в списке папок python.exe
, и когда она найдет его, она использует это python.exe
для запуска вашего скрипта. Этот список папок называется переменной среды PATH.
Что делает скрипт активации ( Activate.ps1
для powershell и activate.bat
для cmd), так это добавляет папку виртуальной среды, содержащую python.exe
в начало пути, поэтому при запуске
python myscript.py
python.exe
Будет использоваться в вашей виртуальной среде (здесь pyenv/Scripts/python.exe
), что также гарантирует, что пакеты, установленные в вашей виртуальной среде, будут найдены.
A2) Запуск просто myscript.py
В Windows стандартный установщик Python связывает файлы .py с исполняемым файлом Python. Я протестировал его, и, похоже, используется специальная программа запуска Python для Windows ( py.exe
). Итак, когда вы просто вводите
myscript.py
в командной строке он будет запущен как <full-path-to-py>/py.exe myscript.py
. Точно то же самое произойдет, если вы просто дважды щелкните myscript.py
в проводнике. Вы можете изменить программу по умолчанию, щелкнув правой кнопкой мыши .py-file -> «Открыть с помощью» -> «Выбрать приложение» -> Отметьте «Всегда использовать это приложение», если хотите, но это не поможет вам с вашей проблемой.
Ответ №2:
Если вы хотите запустить скрипт напрямую, не используя python ранее, тогда вы должны указать коду, какую программу он должен использовать для запуска этого кода.
Допустим, если у вас установлен python в / usr/bin/ python, тогда вам нужно написать в файле python, какую программу использовать. В данном случае это python.
Итак, первая строка в UpperLimb.py файл будет #!/usr/bin/python
. Эта строка укажет программе использовать программу на python в /usr/bin/python.
После этого вам нужно сделать этот скрипт исполняемым. Вы можете использовать следующую команду, чтобы сделать этот файл исполняемым.
$ chmod x UpperLimb.py
Теперь вы можете запустить этот файл следующим образом, используя команду ./UpperLimb.py