Pypi 和 Cython

Pypi and Cython

我正在尝试组装我的第一个 PyPi 包,但对它的一些基本方面越来越困惑。

我的包依赖于 SNPknock。当我尝试在新系统 (Ubuntu 18.04) 上安装它时,我得到:

pip install snpknock
Collecting snpknock
  Using cached https://files.pythonhosted.org/packages/68/a0/ceb6adc2b7f1a3009f2077c157a99640094021a66f881cb678ecf4
78887f/SNPknock-0.5.2.tar.gz
    Complete output from command python setup.py egg_info:
    You don't seem to have Cython installed. Please get a
    copy from www.cython.org and install it

我提取了 setup.py from the tarball here,其中包含该错误消息。

这是我的困惑。 setup.py 文件将 Cython 指定为依赖项:

DEPENDENCIES = ['Cython>='+CYTHON_MIN_VERSION,
                'numpy>='+NUMPY_MIN_VERSION]

然而,它也导入了 Cython,但它似乎需要这样做才能对某些模块进行 cython 化。这一切看起来有点循环,但我怀疑我(或这个包的作者)在这个过程中遗漏了一些东西。

问题似乎是没有 wheels/eggs 适合您的平台。在这种情况下 pip 下载源代码并运行 python setup.py install。如果 setup.py 导入 CythonCython 是否被列为依赖项并不重要。您必须在 运行 pip install 之前有 Cython 因为 pip 无法从没有 运行 setup.py 和 [=12= 的源代码中获取依赖项列表] 要求 Cython 可导入。

如果 snpknock 曾为您的 Python 版本发布过 egg 或 wheel pip 会下载它,获取依赖项列表并在不咨询的情况下安装它们 setup.py;之后它会安装包。在这种情况下,pip 会自动下载 Cython 或直接从 egg/wheel.

安装已编译的扩展