在OSX上预构建的Python包

2024-09-29 00:20:50 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我想创建一个预构建的Python包,其中包含一个C模块。也就是说,在它的最后,我希望有一个tarball,它包含使用我的模块所需的一切,并且是pip可安装的,即在最后我可以做一个:

pip install whatevertarballgetsproduced.tar.gz

我的图书馆就可以用了。它还需要一个友好的虚拟环境。在

我当前的目录结构是:

^{2}$

也就是说,编译后的C库在_mylibrary.so中。从中派生此文件的C源代码是要包含在tarball中的而不是。我也在OSX(Lion)上做这个。mylibrary.py只包含C库代码的Python包装器。在

我如何实现这一点?我想做一个python setup.py bdist,但这并不是我真正想要的(除非我遗漏了由它产生的tarball无法安装pip的东西)。在

为了完成任务,我的设置.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绑定)。在


Tags: 模块installpippy图书馆licensesetupmacos
1条回答
网友
1楼 · 发布于 2024-09-29 00:20:50

亚当,你试过了吗?在

它将生成一个egg文件,可以使用easy_install(不幸的是,不是用pip安装)。在

另外,您的项目似乎缺少mylibrary/__init__.py。在

一旦添加了丢失的“init”文件,我很想知道setup.py是否足够聪明,能够将“so”文件包含到生成的egg文件中。有一个机会你必须以某种方式来推动它(我自己也没有理由去处理“.so”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

你的情况比较简单,因为你似乎没有任何额外的依赖关系。 所以你应该做些类似的事情:

^{pr2}$

注意,dist/目录是构建的eggs文件所在的位置,当setup.py bdist_egg被调用时。在

相关问题 更多 >