Python PyPI包装:安装需要枕头`

Python PyPI包装:安装需要枕头`,python,pip,setuptools,pillow,Python,Pip,Setuptools,Pillow,在上传之前,我使用包目录中的pip3安装-e.测试我的PyPI包 它取决于枕头(导入编码中的PIL) 当我用已经安装好的枕头进行测试时,它工作了 但是,我卸载了枕头,然后用pip3安装-e重新安装了我的软件包。,它不起作用: Obtaining file:///Users/hongbook/dev/identicon Complete output from command python setup.py egg_info: Traceback (most recent call

在上传之前,我使用包目录中的
pip3安装-e.
测试我的PyPI包

它取决于
枕头
(导入编码中的PIL)

当我用已经安装好的枕头进行测试时,它工作了

但是,我卸载了
枕头
,然后用
pip3安装-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'

我怎样才能使我的项目依赖于
枕头
对吗?

我认为您的问题源于此:

version=Identicon.__version__,
为此,您需要导入
Identicon
,这是您的包,它导入
PIL
。因此,您的
setup.py
已损坏。它要求已经安装了依赖项才能执行,但是首先安装这些依赖项是
setup.py
作业


这是包装中常见的“鸡和蛋”情况。解决方案是使用不同的方法解析软件包中的版本号,或者将版本号存储在不会触发依赖项导入的位置。

您可以导入版本,而无需使用
imp
导入整个软件包。看看我是如何做到这一点的:


知道了。但我指的是。这怎么可能呢?这没有道理。。它不会触发依赖项的导入。但是在您的
\uuu init\uuuuuuuuuuuupy
文件中,您可以这样做(我可以在回溯中看到它)。是的,在我的
\uuuuuuuuupy
文件中删除
导入标识图标
是有效的。它解决了这个问题,但在设计项目结构时仍然..
imp
被弃用,因为版本3.4在3.4、3.5和3.6中都能完美地工作有更好的方法来隔离不需要这些黑客攻击的版本号。如果这些方法真的更好的话,这是基于观点的!;-)
version=Identicon.__version__,
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,
      …
     )