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



我的问题与这个问题相似,但又不同。

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

到目前为止,我所做的:我已经将所有必要的库添加到 setup.py 的install_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('"'"'rn'"'"', '"'"'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.pyimport omrdatasettoolsomrdatasettools/__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__'].

相关内容

  • 没有找到相关文章

最新更新