requirements.txtを自動的に作成する


278

時々私はからPythonのソースコードをダウンロードし、githubすべての依存関係をインストールする方法がわかりません。requirements.txtファイルがない場合は、手動で作成する必要があります。問題は次のとおりです。Pythonのソースコードディレクトリを考えるとrequirements.txt、インポートセクションから自動的に作成できますか。


2
これを実行pip freeze > requirements.txtするには、requirements.txt
次のコマンド

7
@Shaikhulしかし、GitHubからパッケージをダウンロードしただけなので、依存関係がインストールされていない場合は役に立ちません...
jonrsharpe '28

8
注意:a)現在のプロジェクトでの使用状況に関係なく、そのシステムにインストールされているモジュールのpip freeze現在のバージョンをダンプしallます。b)pipは、pip経由でインストールされたモジュールのみをリストします
akskap 2017年

回答:


290

仮想環境を使用している場合は問題ありませんpip freeze > requirements.txtそうでない場合は、pigarが適しています。

ちなみに、2.6で動作するかどうかは保証できません。

更新

Pipenvまたは他のツールは、開発フローを改善するために推奨されます。

のPython 3以下の使用

pip3 freeze > requirements.txt

3
エラーを起こす人にはpip3 freeze > requirements.txt、質問する前に試すことをお勧めします。
baranskistad 2017

3
私が実行pip3 freeze > requirements.txtし、私は私が実際にそのようなを使用していますいくつかのパッケージが見つからないために驚いargparseconfigparser。Pythonコアの一部だからでしょうか。pipreqsプロジェクトが使用している要件のみがリストされるため、以下を使用する方が適切な答えだと思います。
Alexis.Rolland 2017年

@ Alexis.Rollandはい、argparseconfigparserのpython3標準ライブラリに属し、そう、何が間違っているとされますかpip3 freeze?あなたの要点はわかりません。
damnever

11
@damnever Okありがとうございます!pip3 freeze私の環境にインストールされているすべてのPythonパッケージのリストが表示されますpipreqsが、探していたソースコードで実際に使用されているすべてのパッケージが表示されます。それ以外には、何も問題はありません。
Alexis.Rolland 2017年

1
pipenvには深刻な問題があります。次のディスカッションを参照してください。news.ycombinator.com
Justin M. Keyes

364

次のコードを使用して、requirements.txtファイルを生成できます。

pip install pipreqs

pipreqs /path/to/project

pipreqに関連する詳細情報は、こちらで確認できます

ときどき遭遇pip freezeするかもしれませんが、これにより、現在のプロジェクトで使用していないパッケージを含む、環境内のすべてのパッケージが保存されます。


1
@IgorBarinovは警告であり、実行しても問題は発生しません。Python2.6 pipreqsにインストールすると同じ警告がrequirements.txt表示されますが、@ DJanssensのおかげでファイルが作成されます
Shaikhul

1
@Shaikhulこれらの警告が表示された場合、完全なファイルはなく、要件の一部のみを取得します。github.com/npow/MemNN/tree/hyperopt repoで確認できます。「hyperopt == 0.0.2 numpy == 1.9.2 scikit_learn == 0.16.1 theano == 0.7.0」しかない
Igor Barinov '28

1
それは言った it is strongly recommended to upgrade to a newer Python version
シェイクル2015

2
素晴らしいツール。ありがとう!ピップフリーズとは異なり、使用されたパッケージを正確に生成する強力な機能です!
Wesam Na

1
新しい印刷ステートメントの出力フォーマットがuesdの場合、これはPython 3.6では機能しません。
Anand CU

12

私の場合、Anacondaを使用しているので、環境内でcondaターミナルから次のコマンドを実行すると解決し、この要件のtxtファイルが自動的に作成されました。

conda list -e > requirements.txt

これは、このGithubリンクpratos / condaenv.txtから取得されました

エラーが表示され、anacondaを使用している場合は、.ymlオプションを使用してみます。

conda env export > <environment-name>.yml

他の人が環境を使用する場合...または他のマシンで新しい環境を作成している場合:conda env create -f .yml

.ymlオプションはここにあります


仮想環境を使用していない場合、これは過度に長いrequirements.txtファイルを作成します
SBFRF

1
これは実際に機能しますか?私がこれを試したときはいつでも、pip install requirements.txt拒否する依存関係と構文の詳細があります。
conner.xyz

.txtを使用していくつかのエラーを見つけたので、私と一緒に機能する他のオプションを追加しました...上記の「.ymlの使用」。
HassanSh__3571619

5

python3.7の場合は必ずpip3を実行してください。

pip3 freeze >> yourfile.txt

上記のコマンドを実行する前に、仮想環境が作成されていることを確認してください。

python3:

pip3 install virtualenv
python3 -m venv <myenvname> 

python2

pip install virtualenv
virtualenv <myenvname>

その後、ソースコードをディレクトリに配置します。ここでpythonファイルを実行すると、非ネイティブモジュールを使用している場合はおそらく起動しません。これらのモジュールをインストールして実行できます

pip3 install <module> or pip install <module> 

これは、現在の環境以外のモジュールリスト全体には影響しません。

これで、一番上でコマンドを実行でき、仮想環境にインストールしたモジュールのみを含む要件ファイルが作成されました。これで、上部でコマンドを実行できます。

このようなことになると状況を簡単にするので、環境を使用することをみんなに勧めます。

これがお役に立てば幸いです。


1

鉱山は、IEと同じ問題に直面した場合、仮想環境上にないとrequirements.txtたい特定のプロジェクトのためかから選択したフォルダ(子供を含みます)とpipreqsがサポートされていません。

使用できます:

import os
import sys
from fuzzywuzzy import fuzz
import subprocess

path = "C:/Users/Username/Desktop/DjangoProjects/restAPItest"


files = os.listdir(path)
pyfiles = []
for root, dirs, files in os.walk(path):
      for file in files:
        if file.endswith('.py'):
              pyfiles.append(os.path.join(root, file))

stopWords = ['from', 'import',',','.']

importables = []

for file in pyfiles:
    with open(file) as f:
        content = f.readlines()

        for line in content:
            if "import" in line:
                for sw in stopWords:
                    line = ' '.join(line.split(sw))

                importables.append(line.strip().split(' ')[0])

importables = set(importables)

subprocess.call(f"pip freeze > {path}/requirements.txt", shell=True)

with open(path+'/requirements.txt') as req:
    modules = req.readlines()
    modules = {m.split('=')[0].lower() : m for m in modules}


notList = [''.join(i.split('_')) for i in sys.builtin_module_names]+['os']

new_requirements = []
for req_module in importables:
    try :
        new_requirements.append(modules[req_module])

    except KeyError:
        for k,v in modules.items():
            if len(req_module)>1 and req_module not in notList:
                if fuzz.partial_ratio(req_module,k) > 90:
                    new_requirements.append(modules[k])

new_requirements = [i for i in set(new_requirements)]

new_requirements

with open(path+'/requirements.txt','w') as req:
    req.write(''.join(new_requirements))

PS:fuzzylogicをチェックするため、追加のライブラリがいくつかある場合があります。



0

PyCharmを使用している場合、プロジェクトを開いたりPyCharmに複製すると、警告が表示され、必要なすべてのパッケージをインストールするように求められます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.