python - pip install 不会安装使用 install_requires 声明的必需依赖项

标签 python pip dependencies setuptools pypi

我的问题类似于this question ,但又有所不同。

我是Python包的维护者omrdatasettools我为用户提供小型帮助脚本来执行数据集下载等。我的脚本有自己的依赖项,例如 lxmltqdm。我希望人们能够安装我的库并使用它,但是当您创建新的 conda 环境并调用 pip install omrdatasettools 时,安装会失败,因为它找不到必要的包。

到目前为止我所做的:我已将所有必需的库添加到我的 setup.pyinstall_requires 部分中

setup(
   ...
   install_requires=['Pillow', 'muscima', "mung", "numpy", "tqdm", "scikit-image", "lxml"]
   ...
)

我正在使用以下命令构建和分发包:

python setup.py sdist
twine upload --repository pypi dist/*

上传按预期进行,现在用户应该能够运行

conda create --name tempTest python==3.7
activate tempTest
pip install omrdatasettools

并使用我的图书馆。但是,当您运行这些行时,您会收到以下错误:

Collecting omrdatasettools
  Downloading omrdatasettools-1.2.tar.gz (39 kB)
    ERROR: Command errored out with exit status 1:
     command: /Users/alex/opt/anaconda3/envs/tempTest/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/bs/1t82d5697dn_nd32ngbq_9bh0000gn/T/pip-install-s56i2r4e/omrdatasettools/setup.py'"'"'; __file__='"'"'/private/var/folders/bs/1t82d5697dn_nd32ngbq_9bh0000gn/T/pip-install-s56i2r4e/omrdatasettools/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /private/var/folders/bs/1t82d5697dn_nd32ngbq_9bh0000gn/T/pip-install-s56i2r4e/omrdatasettools/pip-egg-info
         cwd: /private/var/folders/bs/1t82d5697dn_nd32ngbq_9bh0000gn/T/pip-install-s56i2r4e/omrdatasettools/
    Complete output (9 lines):
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/var/folders/bs/1t82d5697dn_nd32ngbq_9bh0000gn/T/pip-install-s56i2r4e/omrdatasettools/setup.py", line 8, in <module>
        import omrdatasettools
      File "/private/var/folders/bs/1t82d5697dn_nd32ngbq_9bh0000gn/T/pip-install-s56i2r4e/omrdatasettools/omrdatasettools/__init__.py", line 3, in <module>
        from .Downloader import *
      File "/private/var/folders/bs/1t82d5697dn_nd32ngbq_9bh0000gn/T/pip-install-s56i2r4e/omrdatasettools/omrdatasettools/Downloader.py", line 9, in <module>
        from lxml import etree
    ModuleNotFoundError: No module named 'lxml'
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

我读到了一些关于 pip 找不到正确的存储库来下载这些依赖项的内容,但我不确定我在这里缺少什么。如果您先安装所有必需的依赖项,然后再安装我的包,则一切正常。

任何帮助将不胜感激!

最佳答案

您确实在 setup.py导入 omrdatasettools , omrdatasettools/__init__.py 导入 .Downloaderomrdatasettools/Downloader.py imports lxml 尚未安装

简短的简历:不要在 setup.py 中导入(直接或间接)已卸载的模块。

解决方法:

  1. 不要在 __init__.py 中导入子模块,因此当 setup.py 导入 omrdatasettools 时,它仅导入 __init__ .py 但不是子模块。

  2. 在您的 setup.py 中,您可能只需要版本,因此不要导入它,而是从文件中读取。您甚至可以通过评估代码从 Python 模块读取它,而无需触发从 __init__.py 导入。像这样:


from os.path import abspath, dirname, join
from setuptools import setup

versionpath = join(abspath(dirname(__file__)), 'omrdatasettools', '__version__.py')
version_dict = {}

exec(open(versionpath, 'r').read(), version_dict)

现在你有了version_dict['__version__']

关于python - pip install 不会安装使用 install_requires 声明的必需依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62154670/

相关文章:

python - 如何删除XML文件中的重复元素

python - 使用 pip 在 OS X 上重新安装 numpy - "can’ t 被修改或删除,因为 OS X 需要它”

java - 在非 Android Java 项目中使用 Android 应用程序的一部分

macos - 如何在 OS X Mavericks 上从 git 编译 Qt 5.2

c++ - 为什么 <iostream> 依赖于 MinGW dll?

python - 虽然真正的 python 脚本应该无限循环但它只执行一次 - Monkeyrunner

python - 如何从 Flask 中用户提供的 URL 下载文件?

python - 如何在 PyQt5 的 QTableWidgetItem 中使用 UserRole 设置数据

python-3.x - PyCharm 找不到现有的 Matplotlib 安装或安装新的

python - 是否可以创建一个完全独立的 Python 包?