【问题标题】:Pypi and CythonPypi 和 Cython
【发布时间】:2018-12-23 14:09:33
【问题描述】:

我正在尝试整理我的第一个 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 化。这一切似乎有点循环,但我怀疑我(或这个包的作者)在这个过程中遗漏了一些东西。

【问题讨论】:

    标签: python installation cython pypi


    【解决方案1】:

    问题似乎是您的平台没有轮子/鸡蛋。在这种情况下,pip 下载源代码并运行python setup.py install。如果setup.py 导入Cython,那么Cython 是否被列为依赖项并不重要。在运行pip install 之前,您必须拥有Cython,因为如果不运行setup.pypip 无法从源代码中获取依赖项列表,而setup.py 需要Cython 才能被导入。

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

    【讨论】:

    • 谢谢!这是非常清楚的。不过,我仍然感到困惑:如果我看这里:pypi.org/project/SNPknock/#files 我可以在 Linux x86_64 上看到 Python 2.7 的 egg 文件,它描述了我正在使用的系统。为什么pip install 会获取.tar.gz 而不是.egg 文件?
    • 让我们试试这个:python -c "from pip import pep425tags;print(pep425tags.supported_tags)"other variants 以查看支持的 pep425tags 列表并验证 [cp27, linux, x86_64] 是否存在。
    • 我认为下面的第一个元组应该适用,但不是吗?输出:[('cp27', 'cp27mu', 'manylinux1_x86_64'), ('cp27', 'cp27mu', 'linux_x86_64'), ('cp27', 'none', 'manylinux1_x86_64') , ('cp27', 'none', 'linux_x86_64'), ('py2', 'none', 'manylinux1_x86_64'), ('py2', 'none', 'linux_x86_64'), ('cp27', 'none', 'any'), ('cp2', 'none', 'any'), ('py27', 'none', 'any'), ('py2', 'none', 'any'), ('py26', 'none', 'any'), ('py25', 'none', 'any'), ('py24', 'none', 'any'), ('py23', 'none', 'any'), ('py22', 'none', 'any'), ('py21', 'none' , 'any'), ('py20', 'none', 'any')]
    • 不,这些标签是按字面连接的。以Cheetah3 为例。我怀疑 snpknock 的文件已被手动重命名,因此没有任何标签适用。
    • Linux egg 不能跨发行版工作。因此,Pip 不会使用它们。需要的是交叉分发manylinux 轮子,它正是为此目的而替代鸡蛋。
    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 2017-07-11
    • 2013-09-19
    • 1970-01-01
    相关资源
    最近更新 更多