Secara otomatis membuat requirement.txt

278

Terkadang saya mengunduh kode sumber python dari githubdan tidak tahu cara menginstal semua dependensi. Jika tidak ada requirements.txtfile saya harus membuatnya dengan tangan. Pertanyaannya adalah: Mengingat direktori kode sumber python apakah mungkin membuat requirements.txtsecara otomatis dari bagian impor?

Igor Barinov
sumber
2
Anda dapat melakukannya dengan menjalankan pip freeze > requirements.txtakan menyimpan semua perpustakaan python Anda dengan versi saat ini ke dalam requirements.txtfile
Shaikhul
7
@Shaikhul tetapi itu tidak membantu dalam kasus di mana Anda tidak memiliki dependensi yang diinstal karena Anda baru saja mengunduh paket dari GitHub ...
jonrsharpe
8
Harap dicatat: a) pip freezeakan membuang versi terbaru dari allmodul yang diinstal pada sistem itu terlepas dari penggunaan yang ada dalam proyek saat ini. b) pip hanya akan mendaftar modul yang telah diinstal melalui pip
akskap
Kemungkinan duplikat dari Cara membuat requirement.txt?
Daniel Santos

Jawaban:

290

Jika Anda menggunakan lingkungan virtual, pip freeze > requirements.txtbaik-baik saja. JIKA TIDAK , pigar akan menjadi pilihan yang baik untuk Anda.

Omong-omong, saya tidak memastikan itu akan bekerja dengan 2.6.

PEMBARUAN :

Pipenv atau alat lain direkomendasikan untuk meningkatkan aliran pengembangan Anda.

Untuk Python 3 gunakan di bawah ini

pip3 freeze > requirements.txt
Damnever
sumber
3
Untuk siapa saja yang melakukan kesalahan, saya sarankan mencoba pip3 freeze > requirements.txtsebelum mengajukan pertanyaan.
baranskistad
3
Saya mengeksekusi pip3 freeze > requirements.txtdan saya terkejut tidak menemukan beberapa paket yang sebenarnya saya gunakan seperti argparsedan configparser. Apakah itu karena mereka adalah bagian dari inti Python? Saya percaya jawaban yang lebih baik adalah menggunakan di pipreqsbawah karena hanya akan mencantumkan persyaratan yang digunakan proyek Anda.
Alexis.Rolland
@ Alexis.Rolland Ya, argparsedan configparsermilik perpustakaan standar Python3, jadi, ada apa dengan itu pip3 freeze? Saya tidak mengerti maksud Anda.
Damnever
11
@damnever Ok terima kasih! pip3 freezememberi saya daftar semua paket Python diinstal di lingkungan saya sedangkan pipreqsmemberi saya semua yang benar-benar digunakan dalam kode sumber saya yang adalah apa yang saya cari. Selain itu, tidak ada yang salah dengan itu.
Alexis. Rosland
1
pipenv memiliki masalah serius, lihat diskusi ini: news.ycombinator.com/item?id=18612590
Justin M. Keyes
364

Anda dapat menggunakan kode berikut untuk menghasilkan file requirement.txt:

pip install pipreqs

pipreqs /path/to/project

info lebih lanjut terkait dengan pipreq dapat ditemukan di sini .

Terkadang Anda menemukan pip freeze, tetapi ini menyimpan semua paket di lingkungan termasuk yang Anda tidak gunakan dalam proyek Anda saat ini.

DJanssens
sumber
1
@IgorBarinov itu Peringatan dan tidak akan membuat masalah untuk dijalankan pipreqs, saya menginstalnya di python 2.6 dan mendapat peringatan yang sama tetapi itu membuat requirements.txtfile, terima kasih @DJanssens
Shaikhul
1
@Shaikhul jika Anda mendapat peringatan ini, Anda tidak akan memiliki file lengkap, Anda hanya akan mendapatkan bagian dari persyaratan. Anda dapat memeriksanya di github.com/npow/MemNN/tree/hyperopt repo. Saya hanya memiliki 'hyperopt == 0.0.2 numpy == 1.9.2 scikit_learn == 0.16.1 theano == 0.7.0'
Igor Barinov
1
yang mengatakan it is strongly recommended to upgrade to a newer Python version
Shaikhul
2
Alat hebat. Terima kasih! Fitur kuat yang dihasilkannya persis paket yang digunakan, tidak seperti pip freeze!
Wesam Na
1
Ini tidak berfungsi untuk Python 3.6, jika format keluaran pernyataan cetak baru adalah uesd.
Anand CU
12

Dalam kasus saya, saya menggunakan Anaconda, jadi menjalankan perintah berikut dari terminal conda di dalam lingkungan saya menyelesaikannya, dan membuat file txt persyaratan ini untuk saya secara otomatis:

conda list -e > requirements.txt

Ini diambil dari pratos / condaenv.txt tautan Github ini

Jika kesalahan telah terlihat, dan Anda menggunakan anaconda, coba gunakan opsi .yml:

conda env export > <environment-name>.yml

Agar orang lain menggunakan lingkungan ... Atau jika Anda membuat lingkungan baru di komputer lain: conda env create -f .yml

Opsi .yml ditemukan di sini

HassanSh__3571619
sumber
jika Anda tidak menggunakan lingkungan virtual, ini akan membuat file requirement.txt yang terlalu panjang
SBFRF
1
Apakah ini berhasil? Setiap kali saya mencoba ini ada dependensi dan rincian sintaksis yang pip install requirements.txtmenolak.
conner.xyz
Saya menemukan beberapa kesalahan menggunakan .txt, jadi tambahkan saja opsi lain yang bekerja dengan saya juga ... "Menggunakan .yml" yang disebutkan di atas.
HassanSh__3571619
5

Pastikan untuk menjalankan pip3 untuk python3.7.

pip3 freeze >> yourfile.txt

Sebelum menjalankan perintah di atas, pastikan Anda telah membuat lingkungan virtual.

python3:

pip3 install virtualenv
python3 -m venv <myenvname> 

python2 :

pip install virtualenv
virtualenv <myenvname>

Setelah itu masukkan kode sumber Anda di direktori. Jika Anda menjalankan file python sekarang, mungkin itu tidak akan diluncurkan Jika Anda menggunakan modul non-asli. Anda dapat menginstal runing modul tersebut

pip3 install <module> or pip install <module> 

Ini tidak akan memengaruhi Anda seluruh daftar modul kecuali lingkungan tempat Anda berada.

Sekarang Anda dapat menjalankan perintah di atas dan sekarang Anda memiliki file persyaratan yang hanya berisi modul yang Anda instal di lingkungan virtual. Sekarang Anda dapat menjalankan perintah di atas.

Saya menyarankan semua orang untuk menggunakan lingkungan karena Itu membuat segalanya lebih mudah ketika datang untuk hal-hal seperti ini.

Semoga ini bisa membantu.

johnyjohnny
sumber
1

Jika Menghadapi masalah yang sama seperti milik saya yaitu tidak di lingkungan virtual dan menginginkan persyaratan.txt untuk proyek tertentu atau dari folder yang dipilih (termasuk anak-anak) dan pipreqs tidak mendukung.

Kamu bisa memakai :

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: Ini mungkin memiliki beberapa perpustakaan tambahan saat memeriksa fuzzylogic.

DARK_C0D3R
sumber
1

Cara terbaik untuk Python 3 adalah:

pip3 freeze > requirements.txt

itu bekerja untuk saya ...

Mac Rathod
sumber
0

jika Anda menggunakan PyCharm, ketika Anda membuka atau mengkloning proyek ke PyCharm, ia akan menampilkan peringatan dan meminta Anda untuk menginstal semua paket yang diperlukan.

Ahmet
sumber