在上传之前,我在包目录中使用pip3 install -e .测试了我的PyPI包。
它依赖于pillow (在代码中导入PIL )。
当我用已经安装的枕头进行测试时,它工作了。
但是,我卸载了pillow,然后用pip3 install -e .重新安装了我的软件包,它不起作用:
Obtaining file:///Users/hongbook/dev/identicon
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/Users/hongbook/dev/identicon/setup.py", line 4, in <module>
import Identicon
File "/Users/hongbook/dev/identicon/Identicon/__init__.py", line 2, in <module>
from .Identicon import render
File "/Users/hongbook/dev/identicon/Identicon/Identicon.py", line 5, in <module>
from PIL import Image, ImageDraw
ModuleNotFoundError: No module named 'PIL'我预计在安装时,pillow应该已经安装好了,因为我在setup.py(也是在requirements.txt中)中写了install_requires的值:
# setup.py
from setuptools import setup, find_packages
...
setup(
name='Identicon',
version=Identicon.__version__,
...
install_requires=[
'pillow',
],
)
# requirements.txt
pillow如何正确地将项目依赖于pillow?
发布于 2018-02-07 02:11:06
我认为你的问题源于这个:
version=Identicon.__version__,为此,您需要导入Identicon,这是您导入PIL的包。所以,你的setup.py坏了。它要求已经安装了依赖项才能执行,但是setup.py作业首先要安装这些依赖项。
这是包装中常见的“鸡和蛋”的情况。解决方案是使用不同的方法解析包中的版本号,或者将版本号存储在不会触发依赖项导入的地方。
发布于 2018-02-07 05:06:05
您可以使用imp导入版本,而无需导入整个包。看看我如何在SQLObject中做到这一点
from imp import load_source
from os.path import abspath, dirname, join
versionpath = join(abspath(dirname(__file__)), "sqlobject", "__version__.py")
sqlobject_version = load_source("sqlobject_version", versionpath)
setup(name="SQLObject",
version=sqlobject_version.version,
…
)https://stackoverflow.com/questions/48649198
复制相似问题