【问题标题】:pip install does not install required dependencies declared with install_requirespip install 不安装使用 install_requires 声明的必需依赖项
【发布时间】:2020-09-21 01:53:45
【问题描述】:

我的问题类似于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 找不到正确的存储库来下载这些依赖项的内容,但我不确定我在这里缺少什么。如果您先安装所有必要的依赖项,然后安装我的包,那么一切正常。

任何帮助将不胜感激!

【问题讨论】:

    标签: python pip dependencies setuptools pypi


    【解决方案1】:

    你在你的setup.pyomrdatasettools/__init__.py 中使用import omrdatasettools 导入.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__']

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 2013-11-20
      • 1970-01-01
      • 2017-07-07
      • 1970-01-01
      • 2018-09-27
      • 2016-08-21
      • 1970-01-01
      • 2021-04-11
      相关资源
      最近更新 更多