我的问题与这个问题相似,但又不同。
我是 Python 包 omrdatasettools 的维护者,我为用户提供了小的辅助脚本来执行数据集下载等。我的脚本本身有依赖项,例如lxml
或tqdm
。我希望人们能够安装我的库并使用它,但是当您创建新的 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.py
中import omrdatasettools
,omrdatasettools/__init__.py
导入.Downloader
,omrdatasettools/Downloader.py
导入尚未安装lxml
。
简短简历:不要在setup.py
中导入(直接或间接(卸载的模块。
解决方法:
-
不要在
__init__.py
中导入子模块,因此当setup.py
导入omrdatasettools
时,它只会导入__init__.py
而不是子模块。 -
在您的
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__']
.