我正试图组装我的第一个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
我已经从tarball中提取了setup.py
,其中包括错误消息。
这是我的困惑。setup.py
文件将Cython指定为依赖项:
DEPENDENCIES = ['Cython>='+CYTHON_MIN_VERSION,
'numpy>='+NUMPY_MIN_VERSION]
然而,它也导入Cython,但似乎需要这样做才能使一些模块Cython化。这一切看起来有点循环,但我怀疑我(或这个包的作者(在这个过程中遗漏了一些东西。
问题似乎是平台上没有轮子/鸡蛋。在这种情况下,pip
下载源并运行python setup.py install
。如果setup.py
导入Cython
,则所述Cython
是否被列为依赖项并不重要。在运行pip install
之前必须有Cython
,因为如果不运行setup.py
,pip
就无法从源代码中获取依赖项列表,而setup.py
要求Cython
是可导入的。
如果snpknock
为您的Python版本发布了一个egg或轮子,pip
会下载它,获得一个依赖项列表并在不咨询setup.py
的情况下安装它们;之后它会安装软件包。在这种情况下,pip
将自动下载Cython
或直接从egg/wheel安装编译后的扩展。