好的,我想创建一个包含C模块的预构建Python包。也就是说,在它的最后我想要一个tarball,其中包含使用我的模块所需的一切,并且是pip install-able,即最后我可以做:
pip install whatevertarballgetsproduced.tar.gz
和mylibrary将可用。它还需要虚拟环境友好。
我目前的目录结构是:
project/
+ setup.py
+ mylibrary/
+ __init__.py
+ mylibrary.py
+ _mylibrary.so
+ README
也就是说,编译的C库位于_mylibrary.so
中。从中派生此文件的C源是 NOT 以包含在tarball中。我也在OSX(Lion)上这样做。 mylibrary.py
只包含C库代码的Python包装器。
我如何实现这一目标?我考虑过做一个python setup.py bdist
,但这不是我想要的(除非我遗漏了由此产生的tarball不是pip install-able)。
为了完成,我的setup.py看起来像:
from setuptools import setup
setup(
name='mylibrary_py3mac',
version='0.1.1',
description='My library which is tied to OSX & Python 3',
long_description=open('README').read(),
packages=['mylibrary'],
classifiers = [
'Intended Audience :: Developers',
'License :: OSI Approved :: BSD License',
'Operating System :: MacOS :: MacOS X',
'Programming Language :: Python :: 3',
],
)
注意,我不打算公开发布这个tarball,它仅用于内部部署(因此我不关心它是预编译的,还是仅仅与OSX绑定)。
答案 0 :(得分:0)
亚当,你试过setup.py bdist_egg
吗?
它会产生一个鸡蛋文件,可以使用easy_install
安装(不幸的是,不是pip
)。
此外,您的项目似乎缺少mylibrary/__init__.py
。
添加缺失的" init"文件,我很想知道setup.py
是否足够聪明以包含"所以"将文件存入生成的egg文件中。你不得不以某种方式刺激它(我自己没有理由去处理#34;。所以" Python扩展,所以我不知道如何)。
在以下示例中,我使用gevent-1.0b2-py2.7-macosx-10.4-x86_64.egg
构建了setup.py bdist_egg
。我已将其放入当前目录下的pypi/
目录中。我知道它碰巧有其他依赖关系,我也战略性地放在同一个pypi/
目录中。
easy_install --allow-hosts=None \
--find-links=pypi/ \
--always-unzip \
pypi/gevent-1.0b2-py2.7-macosx-10.4-x86_64.egg
您的案例更简单,因为您似乎没有任何额外的依赖关系。 所以你要做的事情是:
easy_install --always-unzip \
dist/mylibrary_py3mac-0.1.1-py2.7-macosx-10.4-x86_64.egg
请注意dist/
目录是内置egg文件的位置,调用setup.py bdist_egg
时。