pip install没有安装用install_requires声明的所需的依赖关系。

问题描述 投票:0回答:1

我的问题类似于 这个问题,但又有所不同。

我是Python包的维护者 全局数据集工具 在这里,我为用户提供了一些小的辅助脚本来进行数据集下载等。我的脚本有自己的依赖性,例如。lxmltqdm. 我希望人们能够安装我的库并使用它,但是当你创建一个新的conda环境并调用 pip install omrdatasettools 安装失败,因为它没有找到必要的包。

到目前为止,我已经做了什么。我把所有必要的库都添加到了 install_requires-我的一节 setup.py

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个回答
2
投票

你做 import omrdatasettools 在你 setup.py, omrdatasettools/__init__.py 进口 .Downloaderomrdatasettools/Downloader.py 进口 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__'].

© www.soinside.com 2019 - 2024. All rights reserved.