python - 如何使用 C 库创建 Python pypi 包?

标签 python setuptools distutils buildout pypi

我想把 IP2Location Python library在我运行的本地 Pypi/Cheeseshop 服务器上,这样我就可以使用 buildout 自动将它包含在项目中。

首先,我通过按照 IP2Location 的(简洁)文档中解释的方式安装它来测试库:1) 下载 IP2Location C library并编译它 2) 在 IP2Location Python 库中运行 python setup.py build && python setup.py install

我成功了,所以我尝试通过运行将 Python 库上传到我的本地 pypi 服务器:

python setup.py register -r local sdist upload -r local

它向我本地的 pypi 服务器上传了一个包,但该包只包含库的 Python 部分,不包含 C 部分。我希望 C 库也包含在内,然后当像 buildout 这样的工具从我的本地 pypi 服务器下载它时自动编译它。

我是 pypi 的新手。我正在尝试做的事情有可能吗?如果是,怎么办?

谢谢, 斯科特

最佳答案

不幸的是没有,至少不是 setup.py 在 python 库中的结构方式。 不过,您可能会通过尝试以下操作获得可重复性(请注意,我还没有尝试过,IP2Location 是一个专有库):

通过 zc.recipe.cmmi 在您的构建中构建 C 库.类似于以下的部分应该可以完成这项工作。

[iplocationc]
recipe = zc.recipe.cmmi
url = http://www.ip2location.com/downloads/ip2location-c-4.0.2.tar.gz

然后,使用 zc.recipe.egg 安装对应的 python 作为 egg :

[iplocation]
recipe = zc.recipe.egg:custom
eggs = iplocation
include-dirs = ${buildout:directory}/parts/iplocationc/includes_dir_goes_here
rpath = ${buildout:directory}/parts/iplocationc/libs_dir_location_goes_here

您可能需要稍微修改一下配方参数并可能摆弄一下 setup.py,但希望这应该能做到。

关于python - 如何使用 C 库创建 Python pypi 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10037842/

相关文章:

python - 如何确保 Jinja 自定义标签只输出一次?

python - 为不同的函数分离 **kwargs

python - distutils 相当于 setuptools 的 `find_packages` 是什么? (Python)

python - 如何通过 pip 包名称使用 setuptools 指定两个替代要求?

python - 遍历元组列表包含python中的字符串和列表

python - 如何在 Python 中替换字符串中的字符?

python - 具有干净命名空间的 Setuptools 子包

python - setup.py 没有安装 swig 扩展模块

python - 如何使用glade GUI分发python应用程序?

python - 设置正确的 python 设置脚本