我最近开始使用 SetupTools 打包我的第一个项目,并且大部分都取得了成功。
不幸的是,我遇到了一个令人困惑的情况——我的项目依赖于一个在 PyPI 上不可用的单文件模块。我已经能够使用 dependency_links 选项轻松地将 setup.py 配置为依赖于该模块,并且一切正常……只要我使用 setup.py 安装它。如果我尝试使用 pip 安装项目 egg,尝试安装模块时会失败,假设它必须是预制的 egg 存档。相比之下,setup.py 检测到它是一个简单的源文件并从中生成一个鸡蛋。
我的目标是让我的项目在 PyPI 上可用,因此仅使用 pip 即可安装它很重要;所以我的问题是......我做错了什么吗?
我的理解是 setuptools 本质上是达到目的的一种手段,即 pip 和 PyPI,所以我觉得这两个工具的行为如此不同对我来说很奇怪。
setup.py 的相关部分和每个工具的输出如下:
setup(
name='particle-fish',
version='0.1.0',
description='Python Boilerplate contains all the boilerplate you need to create a Python package.',
long_description=readme + '\n\n' + history,
author='Lachlan Pease',
author_email='predatory.kangaroo@gmail.com',
url='https://github.com/predakanga/particle-fish',
packages=[
'particle.plugins'
],
include_package_data=True,
install_requires=['particle', 'irccrypt', 'pycrypto'],
dependency_links=['http://www.bjrn.se/code/irccrypt/irccrypt.py#egg=irccrypt-1.0'],
license="BSD",
zip_safe=False,
keywords='particle-fish',
classifiers=[
'Development Status :: 2 - Pre-Alpha',
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Natural Language :: English',
"Programming Language :: Python :: 2",
'Programming Language :: Python :: 2.6',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.3',
],
test_suite='tests',
tests_require=['pytest', 'mock', 'coverage', 'pytest-cov'],
cmdclass = {'test': PyTest},
)
setup.py 安装的输出:
Installed /Users/lachlan/.virtualenvs/particle-fish/lib/python2.7/site-packages/particle_fish-0.1.0-py2.7.egg
Processing dependencies for particle-fish==0.1.0
Searching for irccrypt
Best match: irccrypt 1.0
Downloading http://www.bjrn.se/code/irccrypt/irccrypt.py#egg=irccrypt-1.0
Processing irccrypt.py
Writing /var/tmp/easy_install-svPfHF/setup.cfg
Running setup.py -q bdist_egg --dist-dir /var/tmp/easy_install-svPfHF/egg-dist-tmp-Xq3OCt
zip_safe flag not set; analyzing archive contents...
Adding irccrypt 1.0 to easy-install.pth file
pip 安装的输出:
Downloading/unpacking irccrypt (from particle-fish==0.1.0)
Downloading irccrypt.py
Cannot unpack file /private/var/tmp/pip-mCc6La-unpack/irccrypt.py (downloaded from /Users/lachlan/.virtualenvs/particle-staging/build/irccrypt, content-type: text/plain); cannot detect archive format
Cleaning up...
Cannot determine archive format of /Users/lachlan/.virtualenvs/particle-staging/build/irccrypt