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应用程序中获取所有包的方法吗?
答案 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/