স্বয়ংক্রিয়ভাবে প্রয়োজনীয়তা। টেক্সট তৈরি করুন


276

কখনও কখনও আমি পাইথন উত্স কোডটি ডাউনলোড করি githubএবং কীভাবে সমস্ত নির্ভরতা ইনস্টল করতে হয় তা জানি না। কোনও requirements.txtফাইল না থাকলে আমাকে এটিকে হাতে তৈরি করতে হবে। প্রশ্নটি হল: পাইথন উত্স কোড ডিরেক্টরিটি দেওয়া কি requirements.txtআমদানি বিভাগ থেকে স্বয়ংক্রিয়ভাবে তৈরি করা সম্ভব ?


2
আপনি এটি চালিয়ে তা করতে পারেন যা আপনার pip freeze > requirements.txtসমস্ত অজগর লাইব্রেরি বর্তমান সংস্করণে requirements.txtফাইলগুলিতে সংরক্ষণ করবে
শায়খুল

7
@ শাইখুল তবে আপনি যেখানে নির্ভরতা ইনস্টল করেননি সে ক্ষেত্রে এটি কোনও উপকারে আসেনি কারণ আপনি কেবলমাত্র গিটহাব থেকে প্যাকেজটি ডাউনলোড করেছেন ...
jonrsharpe

8
দয়া করে নোট করুন: ক) pip freezeবর্তমান allসিস্টেমে ইনস্টলড মডিউলগুলির বর্তমান সংস্করণগুলি বর্তমান প্রকল্পের ব্যবহার নির্বিশেষে ডাম্প করবে । খ) পিপ কেবলমাত্র মডিউলগুলি তালিকাভুক্ত করবে যা
পাইপের

উত্তর:


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নীচে ব্যবহার করা আরও ভাল উত্তর কারণ এটি কেবলমাত্র আপনার প্রকল্পটি ব্যবহার করছে প্রয়োজনীয়তার তালিকা করে।
অ্যালেক্সিস। রোল্যান্ড

@ অ্যালেক্সিস.রোলল্যান্ড হ্যাঁ, argparseএবং configparserপাইথন 3 স্ট্যান্ডার্ড লাইব্রেরির অন্তর্গত, সুতরাং, এতে কী দোষ হয়েছে pip3 freeze? আমি আপনার বক্তব্য না।
দমনেভার

11
@ ডামনেভার ওকে ধন্যবাদ! pip3 freezeআমার পরিবেশে ইনস্টল করা সমস্ত পাইথন প্যাকেজগুলির তালিকা আমাকে দেয় যেখানে pipreqsআমার উত্স কোডে আসলে ব্যবহৃত সমস্তগুলি আমাকে দেয় যা আমি খুঁজছিলাম। এর পাশাপাশি, এতে কোনও সমস্যা নেই।
অ্যালেক্সিস.রোল্যান্ড

1
পিপেনভের গুরুতর সমস্যা রয়েছে, এই আলোচনাটি দেখুন: নিউজ.ইকোবিনেটর.com
জাস্টিন এম

362

প্রয়োজনীয়তা.টিএসটি ফাইল তৈরি করতে আপনি নিম্নলিখিত কোডটি ব্যবহার করতে পারেন:

pip install pipreqs

pipreqs /path/to/project

পিপরিকস সম্পর্কিত আরও তথ্য এখানে পাওয়া যাবে

কখনও কখনও আপনি উপস্থিত হন pip freeze, তবে এটি আপনার বর্তমান প্রকল্পে ব্যবহার না করে এমনগুলি সহ পরিবেশের সমস্ত প্যাকেজগুলি সংরক্ষণ করে।


1
@ ইগোরবারিনভ একটি সতর্কবাণী প্রচার করেছেন এবং pipreqsএটি চালানোর সমস্যা তৈরি করবে না , আমি পাইথন ২.6 এ ইনস্টল করেছিলাম এবং একই সতর্কতা পেয়েছি তবে এটি একটি requirements.txtফাইল তৈরি করে , ধন্যবাদ @ ডি জ্যান্সেন্স
শায়খুল

1
@ শাইখুল যদি আপনি এই সতর্কতাগুলি পেয়ে থাকেন তবে আপনার কাছে একটি পূর্ণ ফাইল থাকবে না, আপনি কেবল প্রয়োজনীয়তার একটি অংশ পাবেন। আপনি এটি github.com/npow/MemNN/tree/hyperopt রেপোতে দেখতে পারেন । আমার কাছে কেবল 'হাইপারপট == ০.০.২ নাম্বার == ১.৯.২ সাইকিট_লেয়ার == 0.16.1 থিয়ানো == 0.7.0'
ইগোর বারিনভ

1
যা বলেছিল it is strongly recommended to upgrade to a newer Python version
শাইখুল

2
দুর্দান্ত সরঞ্জাম ধন্যবাদ! এটির শক্তিশালী বৈশিষ্ট্য যা এটি হুবহু ব্যবহৃত প্যাকেজগুলি তৈরি করে, পাইপ ফ্রিজের মতো নয়!
ওয়েসম না

1
এটি নতুন প্রিন্ট স্টেটমেন্ট আউটপুট ফর্ম্যাটিংটি uesd করা হলে পাইথন 3.6 এর জন্য কাজ করে না।
আনন্দ সিইউ

11

আমার ক্ষেত্রে, আমি অ্যানাকোন্ডা ব্যবহার করি, সুতরাং আমার পরিবেশের অভ্যন্তরে কনডা টার্মিনাল থেকে নিম্নলিখিত কমান্ডটি চালানো এটি সমাধান করেছে এবং স্বয়ংক্রিয়ভাবে এই প্রয়োজনীয়তা txt ফাইলটি স্বয়ংক্রিয়ভাবে তৈরি করেছি:

conda list -e > requirements.txt

এটি এই গিথুব লিংক প্রোটোস / কনডেনভ.টিএসটি থেকে নেওয়া হয়েছিল

যদি কোনও ত্রুটি দেখা যায় এবং আপনি অ্যানাকোন্ডা ব্যবহার করছেন তবে .ml বিকল্পটি ব্যবহার করার চেষ্টা করুন:

conda env export > <environment-name>.yml

অন্য ব্যক্তির পরিবেশ ব্যবহারের জন্য ... বা আপনি যদি অন্য মেশিনে একটি নতুন পরিবেশ তৈরি করছেন: কনডা এনভি তৈরি করুন -f। জিমেল

.ml বিকল্পটি এখানে পাওয়া গেছে


আপনি যদি ভার্চুয়াল পরিবেশটি ব্যবহার না করে থাকেন তবে এটি অত্যধিক দীর্ঘ প্রয়োজনীয়তা তৈরি করবে।
টেক্সট

1
এটি কি আসলে কাজ করে? যখনই আমি এটি চেষ্টা করেছি সেখানে নির্ভরতা এবং সিনট্যাক্সের pip install requirements.txtবিবরণগুলি প্রত্যাখ্যান করে।
conner.xyz

.Txt ব্যবহার করে আমি কিছু ত্রুটি পেয়েছি, সুতরাং আমার সাথে কাজ করে এমন অন্য বিকল্পটি কেবল যুক্ত করেছে ... উপরে উল্লিখিত "। জিমেল" ব্যবহার করে।
হাসানশ__3571619

5

পাইথন3.7 এর জন্য পিপ 3 চালানোর বিষয়টি নিশ্চিত করুন।

pip3 freeze >> yourfile.txt

উপরের কমান্ডটি কার্যকর করার আগে নিশ্চিত করুন যে আপনি ভার্চুয়াল পরিবেশ তৈরি করেছেন।

python3:

pip3 install virtualenv
python3 -m venv <myenvname> 

অজগর 2 :

pip install virtualenv
virtualenv <myenvname>

এর পরে আপনার উত্স কোডটি ডিরেক্টরিতে রেখে দিন। আপনি যদি অজগর ফাইলটি এখনই চালান, সম্ভবত আপনি এটি আরম্ভ করবেন না যদি আপনি অ-নেটিভ মডিউল ব্যবহার করেন। চলমান those মডিউলগুলি ইনস্টল করতে পারেন

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

PS: এটি fuzzylogic পরীক্ষা করে নেওয়ার সাথে সাথে আরও কয়েকটি অতিরিক্ত গ্রন্থাগার থাকতে পারে।



0

আপনি যদি পাইচার্ম ব্যবহার করছেন, আপনি যখন পাইকার্মে প্রকল্পটি খুলুন বা ক্লোন করবেন তখন এটি একটি সতর্কতা দেখায় এবং আপনাকে প্রয়োজনীয় সমস্ত প্যাকেজ ইনস্টল করার জন্য জিজ্ঞাসা করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.