स्वचालित रूप से आवश्यकताएँ बनाएँ


276

कभी-कभी मैं अजगर स्रोत कोड से डाउनलोड करता हूं githubऔर यह नहीं जानता कि सभी निर्भरता कैसे स्थापित करें। अगर कोई requirements.txtफ़ाइल नहीं है तो मुझे इसे हाथों से बनाना होगा। सवाल यह है: अजगर स्रोत कोड निर्देशिका को देखते हुए requirements.txtक्या आयात अनुभाग से स्वचालित रूप से बनाना संभव है ?


2
आप इसे चलाकर कर सकते हैं pip freeze > requirements.txtअपने सभी अजगर पुस्तकालयों को वर्तमान संस्करण के साथ requirements.txtफ़ाइल में
सहेजेगा

7
@ शेखुल लेकिन उस मामले में मदद नहीं करता है जहां आपके पास निर्भरताएं स्थापित नहीं हैं क्योंकि आपने केवल
गिटहब

8
कृपया ध्यान दें: क) मौजूदा परियोजना में उपयोग के बावजूद उस सिस्टम पर स्थापित मॉड्यूल के pip freezeवर्तमान संस्करणों को डंप करेगा all। b) पिप केवल मॉड्यूल को सूचीबद्ध करेगा जो कि पिप के माध्यम से स्थापित किया गया है
akskap

जवाबों:


289

यदि आप आभासी वातावरण का उपयोग करते हैं, तो pip freeze > requirements.txtठीक है। यदि नहीं , तो सुअर का बच्चा आपके लिए एक अच्छा विकल्प होगा।

वैसे, मैं यह सुनिश्चित नहीं करता हूं कि यह 2.6 के साथ काम करेगा।

अद्यतन :

पिपेनव या अन्य उपकरण आपके विकास प्रवाह को बेहतर बनाने के लिए अनुशंसित हैं।

के लिए अजगर 3 नीचे का उपयोग

pip3 freeze > requirements.txt

3
किसी के लिए भी, मैं pip3 freeze > requirements.txtसवाल पूछने से पहले कोशिश करने की सलाह देता हूं ।

3
मैं निष्पादित करता हूं pip3 freeze > requirements.txtऔर मुझे कुछ पैकेज नहीं मिलने पर आश्चर्य है जो मैं वास्तव में इस तरह का उपयोग कर रहा हूं argparseऔर configparser। क्या इसलिए कि वे अजगर कोर का हिस्सा हैं? मेरा मानना ​​है कि बेहतर उत्तर pipreqsनीचे उपयोग करना है क्योंकि यह केवल उन आवश्यकताओं को सूचीबद्ध करेगा जो आपकी परियोजना उपयोग कर रही है।
एलेक्सिस रोलैंड

@ Alexis.Rolland हाँ, argparseऔर configparserपायथन 3 मानक पुस्तकालय से संबंधित है, तो, इसमें क्या गलत है pip3 freeze? मुझे आपकी बात नहीं आती।
लानत

11
@ कभी भी ठीक है धन्यवाद! pip3 freezeमुझे अपने वातावरण में स्थापित सभी पायथन पैकेजों की सूची pipreqsदेता है जबकि मुझे उन सभी को देता है जो वास्तव में मेरे स्रोत कोड में उपयोग किए जाते हैं जो मैं देख रहा था। इसके अलावा, इसके साथ कुछ भी गलत नहीं है।
एलेक्सिस। रोलैंड

1
पाइपेनव के पास गंभीर मुद्दे हैं, इस चर्चा को देखें: news.ycombinator.com/item?id=18612590
जस्टिन एम। कीज़

363

आवश्यकताएँ उत्पन्न करने के लिए आप निम्न कोड का उपयोग कर सकते हैं।

pip install pipreqs

pipreqs /path/to/project

पाइपरेक से संबंधित अधिक जानकारी यहां पाई जा सकती है

कभी-कभी आप भर में आते हैं pip freeze, लेकिन यह पर्यावरण के सभी पैकेजों को बचाता है, जिसमें आप अपने वर्तमान प्रोजेक्ट में उपयोग नहीं करते हैं।


1
@IgorBarinov एक चेतावनी को पूरा करता है और इसे चलाने के लिए कोई समस्या पैदा नहीं होगी pipreqs, मैंने इसे अजगर 2.6 पर स्थापित किया और इसे चेतावनी भी मिली लेकिन यह एक requirements.txtफाइल बनाता है , धन्यवाद @DJanssens
Shaikhul

1
@ शेखुल अगर आपको ये चेतावनी मिली तो आपके पास पूरी फाइल नहीं होगी, आपको बस आवश्यकताओं का एक हिस्सा मिलेगा। आप इसे github.com/npow/MemNN/tree/hyperopt repo पर चेक कर सकते हैं । मेरे पास केवल = हाइपरटॉप == ०.०.२ सुपात्र == १.९.२ स्किकिट_लर्न == ०.१६.१ थीनो == ०.ean.० ’
इगोर

1
उस ने कहा it is strongly recommended to upgrade to a newer Python version
शेखुल

2
महान उपकरण। धन्यवाद! इसकी शक्तिशाली विशेषता यह है कि यह बिल्कुल इस्तेमाल किए गए पैकेजों को उत्पन्न करता है, न कि पाइप फ्रीज की तरह!
वेसम न

1
पायथन 3.6 के लिए यह काम नहीं करता है, अगर नया प्रिंट स्टेटमेंट आउटपुट स्वरूपण uesd है।
आनंद सीयू

11

मेरे मामले में, मैं एनाकोंडा का उपयोग करता हूं, इसलिए मेरे वातावरण के अंदर कोंडा टर्मिनल से निम्नलिखित कमांड को हल किया गया, और इस आवश्यकताओं को स्वचालित रूप से मेरे लिए txt फ़ाइल बनाई:

conda list -e > requirements.txt

यह इस Github लिंक pratos / condaenv.txt से लिया गया था

यदि कोई त्रुटि देखी गई है, और आप एनाकोंडा का उपयोग कर रहे हैं, तो .yml विकल्प का उपयोग करने का प्रयास करें:

conda env export > <environment-name>.yml

अन्य व्यक्ति पर्यावरण का उपयोग करने के लिए ... या यदि आप अन्य मशीन पर एक नया वातावरण बना रहे हैं: conda env create -fcl।

.yml का विकल्प यहाँ पाया गया


यदि आप एक आभासी वातावरण का उपयोग नहीं कर रहे हैं, तो यह एक अत्यधिक लंबी आवश्यकताओं का निर्माण करेगा। फ़ाइल
SBFRF

1
क्या यह वास्तव में काम करता है? जब भी मैंने यह कोशिश की है तो निर्भरताएं और वाक्यविन्यास विशेष हैं जो pip install requirements.txtअस्वीकार करते हैं।
coner.xyz

मैंने .txt का उपयोग करते हुए कुछ त्रुटियां पाईं, इसलिए बस दूसरे विकल्प को जोड़ा जो मेरे साथ भी काम करता है ... ".yml का उपयोग करते हुए" ऊपर वर्णित है।
हसनशाह_3571619

5

Python3.7 के लिए pip3 चलाना सुनिश्चित करें।

pip3 freeze >> yourfile.txt

उपरोक्त कमांड निष्पादित करने से पहले सुनिश्चित करें कि आपने एक आभासी वातावरण बनाया है।

python3:

pip3 install virtualenv
python3 -m venv <myenvname> 

अजगर 2 :

pip install virtualenv
virtualenv <myenvname>

उसके बाद अपना सोर्स कोड डायरेक्टरी में डालें। यदि आप अब अजगर फ़ाइल चलाते हैं, तो शायद यह लॉन्च नहीं होगा यदि आप गैर-देशी मॉड्यूल का उपयोग कर रहे हैं। आप उन मॉड्यूल को इंस्टॉल कर सकते हैं जो रनिंग हैं

pip3 install <module> or pip install <module> 

यह आपके द्वारा पूरे पर्यावरण सूची को प्रभावित नहीं करेगा सिवाय उस पर्यावरण के जो आप में हैं।

अब आप शीर्ष पर कमांड को निष्पादित कर सकते हैं और अब आपके पास एक आवश्यकता फ़ाइल है जिसमें केवल वर्चुअल वातावरण में आपके द्वारा स्थापित मॉड्यूल हैं। अब आप शीर्ष पर कमांड चला सकते हैं।

मैं सभी को पर्यावरण का उपयोग करने की सलाह देता हूं क्योंकि जब सामान की बात आती है तो यह आसान हो जाता है।

आशा है कि इससे मदद मिली।


1

अगर वर्चुअल इश्यू पर नहीं बल्कि वर्चुअल वातावरण पर मेरा ही मुद्दा है और किसी विशिष्ट प्रोजेक्ट के लिए या चयनित फ़ोल्डर (बच्चों को शामिल किया जाता है) और पाइपरेक का समर्थन नहीं कर रहा है।

आप उपयोग कर सकते हैं :

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))

पुनश्च: इसमें कुछ अतिरिक्त पुस्तकालय हो सकते हैं क्योंकि यह फ़ज़लॉजिक पर जाँच करता है।


1

पायथन 3 के लिए सबसे अच्छा तरीका है:

pip3 freeze > requirements.txt

यह मेरे लिए काम किया ...


0

यदि आप PyCharm का उपयोग कर रहे हैं, जब आप प्रोजेक्ट को खोलते हैं या PyCharm में क्लोन करते हैं, तो यह एक अलर्ट दिखाता है और आपसे कुछ आवश्यक पैकेज स्थापित करने के लिए कहता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.