有时我从github下载python源代码,不知道如何安装所有的依赖项。如果没有requirements.txt文件,我必须手工创建它。 问题是: 给定python源代码目录,是否有可能从导入部分自动创建requirements.txt ?
当前回答
我创建了这个bash命令。
for l in $(pip freeze); do p=$(echo "$l" | cut -d'=' -f1); f=$(find . -type f -exec grep "$p" {} \; | grep 'import'); [[ ! -z "$f" ]] && echo "$l" ; done;
其他回答
使用pip freeze > requirements.txt创建需求文件是一种糟糕的方式!它可以作为你的问题的临时解决方案,但当管理python项目的需求时,最好手动完成。
简单地搜索“import”或“from x import”,就会给出需要安装的所有依赖项的列表(没有其他内容)。
pip冻结的问题是,它只是简单地转储所有安装的严格版本的包,每个依赖项都有自己的依赖项,它们都包含在转储中。 例如,你已经安装了lib==1.0,这需要sub-lib==0.5,如果你使用pip freeze,你会得到两者,但后来当你希望将lib版本更新到2.0时,很可能你会得到冲突,因为lib v2.0现在使用sub-lib v1.0,而不是你需要的v0.5…对于多个依赖项,这很快就变得复杂起来。
我们在几个项目中遇到了这些问题,从那时起,我创建了一个自动脚本来清理pip freeze的转储,它是安全的(注释不需要的依赖项),工作很棒。
你可以使用下面的代码来生成一个requirements.txt文件:
pip install pipreqs
pipreqs /path/to/project
更多有关pipreqs的信息可以在这里找到。
有时您会遇到pip冻结,但这会保存环境中的所有包,包括那些您在当前项目中不使用的包。
创建requirement.txt:
对于Python 3版本命令为:
pip3 freeze > requirements.txt
对于Python 2版本命令为:
pip freeze > requirements.txt
让安装:
对于Python 3版本命令为:
pip3 install -r requirements.txt
对于Python 2版本命令为:
pip install -r requirements.txt
在我的例子中,我使用Anaconda,所以在我的环境中从conda终端运行以下命令解决了这个问题,并自动为我创建了这个requirements.txt文件:
conda list -e > requirements.txt
这是从这个Github链接pratos/condaenv.txt
如果看到错误,并且您正在使用anaconda,请尝试使用.yml选项:
conda env export > <environment-name>.yml
供其他人使用该环境,或者如果您正在另一台机器上创建新环境:
conda env create -f <environment-name>.yml
.yml选项在这里找到
简单的python方式
要获得标准REQUIREMENTS .txt文件中所有REQUIREMENTS的列表,您可以使用以下命令。
pip freeze > requirements.txt
现在,这将自动创建一个标准需求文件,其中包含安装在相应版本旁边的所有包。
终端打印精美
如果你只是想在终端上得到一个漂亮的打印,你可以使用下面的方法。
pip list
它以漂亮的打印格式列出了所有已安装的包。
自定义的依赖
如果你有一个项目文件夹,比如Github Repo,你想为项目获得一个自定义的requirements.txt,你可以使用下面的包。 https://pypi.org/project/pipreqs/ pipreqs
使用
$ pipreqs /home/project/location
Successfully saved requirements file in /home/project/location/requirements.txt
requirements.txt的内容
wheel==0.23.0
Yarg==0.1.9
docopt==0.6.2