如何打包python模块所依赖的共享对象

How to package shared objects that python modules depend on?

本文关键字:共享 对象 依赖 何打包 python 模块      更新时间:2023-10-16

我有一个用C++实现的python包,我正在使用setuptools分发它。我的C++代码依赖于一些共享对象,特别是boost.python库。我应该如何分发这些共享对象?目前,我要求软件包用户单独安装boost C++库,但我宁愿将所有内容捆绑在一个setuptools发行版中,让他/她更轻松。目前,除了安装我的包外,他们还必须设置boost库和LD_LIBRARY_PATH环境变量。

声明依赖项

setup.py中有一个名为install_requires = [""]的选项:例如:

setup(
    name='django-cherrypy',
    version='0.1',
    packages=packages,
    license='LICENSE',
    description='cherrypy, running under django',
    long_description=open('README.md').read(),
    author='Calvin Cheng',
    author_email='calvin@calvinx.com',
    install_requires=['cherrypy-wsgiserver'],
    extra_requires=['newrelic'],
    url='https://github.com/od-eon/django-cherrypy',
)

此安装程序要求chrerryPy WSGI服务器库。

捆绑所有内容

一切都在这里解释:http://pythonhosted.org/distribute/setuptools.html#declaring-依赖

PiPy:

  1. 当您的项目被安装时,通过使用EasyInstall,setup.py install或setup.py develop,所有依赖项都不是将定位(通过PyPI)、下载、构建(如果必要的),并安装
  2. 项目中的任何脚本都将安装有包装器,用于验证指定的依赖项,并确保版本被添加到sys.path(例如,如果已经添加了多个版本已安装)
  3. Python Egg发行版将包含一个元数据文件列出依赖项

PyPI 中没有的依赖项

如果您的项目依赖于未在PyPI中注册的包,只要它们可用,你仍然可以依赖它们下载为:

  • 一个标准distutils-sdist格式的鸡蛋
  • 单个.py文件
  • 或VCS存储库(Subversion、Mercurial或Git)。您只需要在setup()的dependency_links参数中添加一些URL