带有setup.py/easy_install的ModuleNotFoundError,但是pip有效

时间:2018-11-02 19:21:09

标签: python windows pip setuptools

我正在开发一个应用程序,并希望使用“ setup.py development”将其放入活动的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,以查看它是否实际上在鸡蛋目录中,并发现在寻找easy-install.pth时,它正在浏览PyQt5.sip中的条目时,显然是有点困惑,因为它试图在每个目录中打开一个名为“ ”的文件。每次失败,它都会尝试下一个鸡蛋。这也证明该错误不是由于缺少DLL依赖关系所致,因为Python甚至从未尝试加载它。

1 个答案:

答案 0 :(得分:0)

这不是一个答案,但至少是一种解决方法。我刚刚发现了pip install -e .,当然可以。