【发布时间】:2019-04-07 01:24:15
【问题描述】:
我正在开发一个应用程序,并希望使用“setup.py develop”将其放入活动 venv。这不能正常工作; 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'
如果我直接在 REPL 中import PyQt5.sip 会发生同样的错误。
venv 的 site-packages 目录如下所示(没有所有其他依赖项):
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”样式安装依赖项,而站点包的相关部分如下所示:
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 的特殊功能。
我尝试在 procmon 下运行 Python 以查看它是否真的在查看 egg 目录,发现在查找 PyQt5.sip 时,它正在遍历 easy-install.pth 中的条目,但显然有点困惑,因为它尝试在每个目录中打开一个名为“
【问题讨论】:
标签: python windows pip setuptools