列出应用程序使用的python包

时间:2011-03-07 12:26:19

标签: python

def get_pkgs():
    pkgs = []
    for importer, modname, ispkg in \
            pkgutil.walk_packages(path=None, onerror=lambda x: None):
    pkgs.append(modname)
    return pkgs

上面的代码片段为我提供了分发中的所有python包。有人可以建议我从python应用程序中获取所有包的方法吗?

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用Python依赖性分析工具snakefood

答案 1 :(得分:1)

Snakefood很好,正如Sven Marnach已经回答的那样,但是它提供了所有文件依赖性,我不确定它是否会告诉你使用了什么包,而不是每个文件依赖。

对于Python Package Index中提供的软件包,您可以使用virtualenv(及其附带的pip)来获取所需/已用软件包的简单列表。

例如,假设您还安装了优秀的virtualenvwrapper工具(高度推荐),下面的序列显示了pylint的包要求:< / p>

$ mkvirtualenv pylint_dep_check --no-site-packages
New python executable in pylint_dep_check/bin/python
Installing setuptools............done.
$ pip freeze   #Note the wsgiref 'bug' where it always shows up
wsgiref==0.1.2
$ workon pylint_dep_check
(pylint_dep_check) $ pip install pylint
(... snipped lengthy install text ...)
(pylint_dep_check) $ pip freeze
logilab-astng==0.21.1
logilab-common==0.55.0
pylint==0.23.0
unittest2==0.5.1
wsgiref==0.1.2

Noe --no-site-packages virtualenv创建选项的最重要用途(惊喜!)确保您的virtualenv是完全新鲜的,并且没有安装您的发行版的网站包。这样就很清楚你安装的应用程序需要什么。

如果这是您开发的应用程序,跟踪依赖关系(以及优秀/干净的工作方式)的一种好方法是在干净的virtualenv中设置应用程序(使用再次--no-site-packages选项,然后再次使用pip freeze找出您安装的软件包以使其正常工作。

使用--no-site-packages选项启动“全新”python安装的能力非常非常有用。我为所有应用程序执行此操作并测试我感兴趣的包,而不会弄乱我的工作区。

如果您还没有使用virtualenv和pip,请继续使用它。这是一个很好的介绍: http://mathematism.com/2009/07/30/presentation-pip-and-virtualenv/