我的问题类似于 这个问题,但又有所不同。
我是Python包的维护者 全局数据集工具 在这里,我为用户提供了一些小的辅助脚本来进行数据集下载等。我的脚本有自己的依赖性,例如。lxml
或 tqdm
. 我希望人们能够安装我的库并使用它,但是当你创建一个新的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找不到正确的仓库来下载这些依赖关系的信息 但我不确定我错过了什么。如果你先安装所有必要的依赖项,然后再安装我的包,一切都能正常工作。
如果有任何帮助,我将非常感激
你做 import omrdatasettools
在你 setup.py
, 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__']
.