OSX上预构建的Python包

时间:2012-08-07 20:28:59

标签: python macos python-3.x setuptools

好的,我想创建一个包含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绑定)。

1 个答案:

答案 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时。