好的,我想创建一个预先构建的包含C模块的Python包。也就是说,在它结束时,我想有一个包含用我的模块所需要的一切,是PIP安装-能,即在最后,我可以做一个压缩包:OSX上的预构建Python包
pip install whatevertarballgetsproduced.tar.gz
,并在MyLibrary将可。它还需要虚拟环境友好。
我现在的目录结构:
project/
+ setup.py
+ mylibrary/
+ __init__.py
+ mylibrary.py
+ _mylibrary.so
+ README
也就是说,编译的C库是_mylibrary.so
。源自该文件的C源文件是而不是将包含在tarball中。我也在OSX(Lion)上做这个。 mylibrary.py
只包含C库代码的Python包装。
我该如何做到这一点?我想过要做一个python setup.py bdist
,但这并不是我想要的(除非我错过了由此产生的tarball不是pip安装的东西)。
完成的缘故,我的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',
],
)
注意,我不上公开发布此压缩包计划,它仅用于内部部署的目的(所以为什么我不不关心它被预编译,或仅与OSX绑定)。
忘了包含'__init __。py',谢谢指出。为了回答你的问题:我确实尝试过制作鸡蛋,但正如你所提到的那样.egg与Pip无关,这对我来说是一个关键要求。 – 2012-08-08 16:57:16
当您使用Pip安装软件包时,您的目标是Python虚拟环境还是直接安装到全球站点软件包中?在前一种情况下,您的Pip要求可能没有实际意义,因为现代'virtualenv'捆绑了pip和easy_install,这些工具可以很好地互操作。所以如果pip缺少一个功能,可以使用easy_install,如图所示。 – 2012-08-08 20:49:21
实际上,在某些情况下,我需要定位全局站点包,而在其他情况下,我将使用虚拟环境。我还有一些其他的依赖项,这些依赖项在pip需求文件中指定,因此,不必为该项目混合使用'easy_install'和'pip'进行包管理。 – 2012-08-09 16:15:28