2017-02-14 81 views
7

列出在其他地方部署工作项目所需的所有依赖项的最有效方法是什么?Python中的列表依赖项

Python 2.7,Windows开发环境,不使用每个项目的virtualenv,而是全局开发环境,根据需要安装库,从一个项目跳到下一个项目。

我已经把轨道最(不知道所有)我必须安装一个给定的项目库。我有而不是跟踪与它们自动安装的任何子依赖关系。做pip freeze列出了两个,加上所有其他安装的库。

有没有办法列出你需要安装的东西,不多不少,部署项目?

注意:无法想象这里已经没有Q + A了,但是我找不到它。

编辑鉴于下面的答案,一些澄清。我的项目由一堆模块组成(我写的),每个模块都有一堆import s。我应该将所有模块的所有导入复制粘贴到一个文件中,排除重复项并从标准库中删除所有内容(以及我如何知道它们)?或者,还有更好的方法?这就是问题所在。

回答

5

扫描您的import报表。你可能只会导入你明确想要导入的东西,而不是依赖项。

制作一个像pip freeze那样的列表,然后创建并激活virtualenv。

执行pip install -r your_list,并尝试在该virtualenv中运行您的代码。注意任何异常,将它们与包匹配,并添加到您的列表中。重复,直到您的代码运行没有问题。

现在您有一个列表,可在您的部署站点上输入pip install

这是非常手动的,但不需要外部工具,并强制您确保您的代码运行。 (将您的测试套件作为支票运行是很好的,但不够。)

+0

这个答案是正确的,很好,因为它不依赖于任何工具。查看一些其他答案,了解如何自动扫描导入。 – nighthawk454

+0

@ nighthawk454:谢谢。我已经提出了其他答案。 – 9000

1

这样做的方法是分析您的导入。要自动化,请查看Snakefood。然后,您可以制作一个requirements.txt文件并开始使用virtualenv

下面将列出依赖,不包括标准库模块:

sfood -fuq package.py | sfood-filter-stdlib | sfood-target-files 

相关问题:

Get a list of python packages used by a Django Project

list python package dependencies without loading them?

+1

Snakefood只是生成依赖关系图。你打算如何排除测试依赖关系和依赖关系? – wim

12

pipreqs解决了这个问题。它生成项目级 requirements.txt文件。

安装pipreqs:pip install pipreqs

  1. 生成项目级requirement.txt文件:pipreqs /路径/到/你/项目/
  2. 要求的文件会被保存在/路径/到/你/项目/requirements.txt

如果你想在pip freeze阅读的pipreqs更多的优点,阅读它from here

+1

@Downvoter请留言,我会改进我的回答。 – haifzhan

+0

我不知道为什么,这个页面的3个回答已被降低,但downvoter没有留下任何评论 – haifzhan

+0

我降低了它的评分。而且我会对任何提示如何生成'requirements.txt'文件的答案给予低估,因为它们都是黑客,这个文件服务于不同的目的。这个文件不能用于部署 - 这就是'setup.py'的用途。 – wim