【问题标题】:ModuleNotFoundError with setup.py/easy_install, but pip works带有 setup.py/easy_install 的 ModuleNotFoundError,但 pip 有效
【发布时间】: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 中的条目,但显然有点困惑,因为它尝试在每个目录中打开一个名为“”的文件。每次失败时,它都会尝试下一个鸡蛋。这也证明了该错误不是由于缺少 DLL 的依赖关系,因为 Python 甚至从未尝试加载它。

【问题讨论】:

    标签: python windows pip setuptools


    【解决方案1】:

    不是一个完整的答案,但至少是一种解决方法。我刚刚发现了pip install -e .,当然,它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 2021-10-31
      • 2012-01-18
      • 1970-01-01
      • 2013-11-26
      • 2023-03-27
      相关资源
      最近更新 更多