在Python程序包中需要BeautifulSoup-setup.py需要什么?

我正在为python发行版foo编写安装脚本.我的代码需要BeautifulSoup,因此当前目录的结构如下:

<root>/
        setup.py
        __init__.py
        foo.py
        BeautifulSoup/
            __init__.py
            BeautifulSoup.py
            etc.

setup.py当前看起来像这样(较少的元信息):

setup(name='foo',
      version='0.9.0',
      py_modules=['foo']
      )

我希望包括BeautifulSoup,以防用户尚未安装它,但是如果他们已经以特定版本安装了它,我也不想安装它.我在Python 2.7.2 docs中注意到,我应该在setup.py文件中包含packages [[…]].

但是,Section 2.4. Relationships between Distributions and Packages提到有一种方法可以指定需要特定版本的软件包.我在setup.py中找不到任何有关如何使用“要求表达式”的示例,因此我不确定这是否是我所需要的.

简而言之,我需要一种说法:

This package requires BeautifulSoup, with at least X.X.X version. If that version isn’t installed, use the one that’s provided.

我怎么做?

解决方法:

目录结构:

<root>/
        setup.py
        foo.py

注意:没有__init__.py文件.

您可以使用distribute指定依赖项setup.py:

from setuptools import setup

setup(name='foo',
      version='0.9.0',
      py_modules=['foo'],
      install_requires=['BeautifulSoup >= X.X.X'],
)

如果尚未安装,则将安装所需版本的BeautifulSoup.在这种情况下,您无需提供BeautifulSoup.

如果您不想自动安装BeautifulSoup:

<root>/
        setup.py
        foobar/
            __init__.py
            foo.py
            BeautifulSoup/
                __init__.py
                BeautifulSoup.py
                etc.

setup.py:

from setuptools import setup, find_packages

setup(name='foobar',
      version='0.9.0',
      packages=find_packages(),
) #NOTE: no install_requires

在模块中的某个位置:

import pkg_resources
try:
    pkg_resources.require("BeautifulSoup>=X.X.X")
except pkg_resources.ResolutionError:
    from foobar import BeautifulSoup
else:
    import BeautifulSoup

这是一种不太理想且不寻常的方法.

上一篇:libtool python模块链接和安装


下一篇:python包的数据缓存