Я занимаюсь разработкой приложения и хочу поместить его в активный venv с помощью «setup.py development». Это не работает правильно; Python не находит установленные зависимости впоследствии.
Если я соберу колесо из него и установлю его с помощью pip, все будет нормально.
Сокращенный журнал установки ниже. Полный вывод занимает немного больше времени, но он успешно устанавливается только один пакет за другим.
C:\Daten\pyv>py -3.7-32 -m venv v37-32
C:\Daten\pyv>v37-32\Scripts\activate
(v37-32) C:\Daten\pyv>cd ..\Projekte\i\IB4Application
(v37-32) C:\Daten\Projekte\I\IB4Application>python setup.py develop
running develop
Checking .pth file support in C:\Daten\pyv\v37-32\Lib\site-packages\
C:\Daten\pyv\v37-32\Scripts\pythonw.exe -E -c pass
TEST PASSED: C:\Daten\pyv\v37-32\Lib\site-packages\ appears to support .pth files
[...]
Installed c:\daten\projekte\i\ib4application
Processing dependencies for IB4Application==1.0
Searching for PyQt5<6
[...]
Installing PyQt5-5.11.3-5.11.2-cp35.cp36.cp37.cp38-none-win32.whl to c:\daten\pyv\v37-32\lib\site-packages
writing requirements to c:\daten\pyv\v37-32\lib\site-packages\PyQt5-5.11.3-py3.7-win32.egg\EGG-INFO\requires.txt
Adding PyQt5 5.11.3 to easy-install.pth file
[... горы зависимостей ...]
Searching for PyQt5_sip<4.20,>=4.19.11
[...]
Installing PyQt5_sip-4.19.13-cp37-none-win32.whl to c:\daten\pyv\v37-32\lib\site-packages
Adding PyQt5-sip 4.19.13 to easy-install.pth file
[... горы зависимостей ...]
Finished processing dependencies for IB4Application==1.0
Теперь, когда установка завершена, я перехожу из пути проекта, чтобы избежать случайного относительного импорта.
(v37-32) C:\Daten\Projekte\I\IB4Application\IB4Application>cd ..\..
Я запускаю скрипт-обертку, созданный при установке, и получаю сообщения об ошибках.
(v37-32) C:\Daten\Projekte\I>python ..\..\pyv\v37-32\Scripts\IB4Application-script.pyw
Traceback (most recent call last):
File "c:\daten\projekte\i\ib4application\IB4Application\main.py", line 17, in main
from . import app
File "c:\daten\projekte\i\ib4application\IB4Application\app.py", line 7, in <module>
from PyQt5.QtCore import QSize, QThread, QObject, pyqtSignal
ModuleNotFoundError: No module named 'PyQt5.sip'
Такая же ошибка происходит, если я import PyQt5.sip
прямо в REPL.
Каталог сайтов-пакетов venv выглядит следующим образом (без всех других зависимостей):
2018-11-02 19:37 420 easy-install.pth
2018-11-02 19:37 126 easy_install.py
2018-11-02 19:37 37 IB4Application.egg-link
2018-11-02 19:37 <DIR> pip
2018-11-02 19:37 <DIR> pip-10.0.1.dist-info
2018-11-02 19:37 <DIR> pkg_resources
2018-11-02 19:37 <DIR> PyQt5-5.11.3-py3.7-win32.egg
2018-11-02 19:37 <DIR> PyQt5_sip-4.19.13-py3.7-win32.egg
2018-11-02 19:37 <DIR> setuptools
2018-11-02 19:37 <DIR> setuptools-39.0.1.dist-info
Обратите внимание, что setup.py
установил все колеса как яйца. easy-install.pth
имеет:
c:\daten\projekte\i\ib4application
./pyqt5-5.11.3-py3.7-win32.egg
./pyqt5_sip-4.19.13-py3.7-win32.egg
Недостающий модуль находится в ./pyqt5_sip-4.19.13-py3.7-win32.egg\PyQt5\sip.pyd
, именно там, где он находится в этой среде.
Если я начну с пустого venv и установлю готовое колесо приложения с помощью pip, оно установит зависимости в стиле "dist-info", а соответствующая часть site-пакетов выглядит следующим образом:
2018-11-02 19:56 <DIR> PyQt5
2018-11-02 19:56 <DIR> PyQt5-5.11.3.dist-info
2018-11-02 19:56 <DIR> PyQt5_sip-4.19.13.dist-info
Запуск приложения теперь работает, но без специальных функций setup.py develop
.
Я попытался запустить Python под procmon, чтобы увидеть, действительно ли он просматривал каталоги egg, и обнаружил, что, когда он просматривает записи в easy-install.pth
при поиске PyQt5.sip
, он, похоже, немного запутался, потому что он пытается открыть файл с именем "" в каждом из каталогов. Каждый раз, когда это терпит неудачу, это пробует следующее яйцо. Это также доказывает, что ошибка не связана с отсутствующими зависимостями DLL, потому что Python даже не пытается ее загрузить.