প্যাকেজ ইনস্টল করার পাশাপাশি আনইনস্টল করতে আমি কীভাবে পিপ প্রয়োজনীয় ফাইল ব্যবহার করতে পারি?


90

আমার কাছে একটি পাইপ প্রয়োজনীয় ফাইল রয়েছে যা বিকাশের সময় পরিবর্তন হয়।

প্রয়োজনীয় ফাইলগুলিতে উপস্থিত না হওয়া প্যাকেজগুলি আনইনস্টল করার পাশাপাশি যেগুলি প্রদর্শিত হবে সেগুলি ইনস্টল করার pipজন্য তৈরি করা যেতে পারে ? মানক পদ্ধতি আছে কি?

এটি পাইপ প্রয়োজনীয় ফাইলগুলিকে প্যাকেজগুলির প্রমিত তালিকা হতে দেবে - একটি 'যদি এবং কেবল যদি' পদ্ধতির।

আপডেট : আমি এটিকে https://github.com/pypa/pip/issues/716 এ একটি নতুন বৈশিষ্ট্য হিসাবে প্রস্তাব করেছি


4
আপনার প্রোগ্রামটির প্রয়োজন নেই বলে আপনি কি সত্যিই পাইপ আনইনস্টল সালিসি প্যাকেজগুলি চান? কিছুটা বিপজ্জনক মনে হচ্ছে ...
স্কট হান্টার

11
@ স্কটহান্টার আপনি যদি সাইট প্যাকেজবিহীন কোনও ভার্চুয়ালনেভে থাকেন তবে এটি করা যুক্তিসঙ্গত জিনিস।
মাইকেল মায়ার

4
@ স্কটহান্টার হ্যাঁ যদি এমন কোনও নিয়ন্ত্রিত (ভার্চুয়াল) পরিবেশ ব্যবহার করা হয় যেখানে আমি সেখানে যা কিছু নির্দিষ্ট করতে চাই - এবং সেখানে এমন আর কিছুই নেই যা সম্ভবত সমস্যার কারণ হতে পারে, যেমন অপ্রত্যাশিত নির্ভরতা।
wodow

@ মিশেলমিয়ার যদি এটি উত্তর হয় তবে দয়া করে উত্তর হিসাবে যুক্ত করুন এবং আমি এটি গ্রহণ করব!
wodow

@ উডো সম্পন্ন আমি উত্তর হিসাবে পোস্ট না করার একমাত্র কারণ হ'ল সম্ভবত আরও একটি সহায়ক সমাধান যা আপনাকে যা চান তা পেতে পারে।
মাইকেল মায়ার

উত্তর:


16

সংক্ষিপ্ত উত্তর না, আপনি পাইপের সাহায্যে এটি করতে পারবেন না।


32
যেমন স্টিফেন নীচে বলেছেন:pip uninstall -r requirements.txt
অগস্ট

31
@ ওমিট এটি প্রয়োজনীয় প্যাকেজগুলিতে উপস্থিত না এমন প্যাকেজগুলি আনইনস্টল করে না। এটি ফাইলের মধ্যে উপস্থিত সমস্ত প্যাকেজ আনইনস্টল করে।
মাইকেল মায়ার

4
@ মিশেল মিয়র, আহ, আমি আসল প্রশ্নের দিকে খুব একটা মনোযোগ দিইনি। আমার খারাপ।
অমিত

4
-yY টিপতে এবং অনেকবার প্রবেশ করতে না পারার জন্য @ ওমিট এর আদেশে একটি যুক্ত করুন । আমার ভুল থেকে শিখুন।
গ্রেগ হিলস্টন

4
কেবল যোগ করার জন্য: pip uninstall -r requirements.txtকেবলমাত্র আপনার প্রয়োজনীয়তার.txt সংস্করণগুলি আনইনস্টল করবে। boto3==1.10.0উদাহরণস্বরূপ আপনি যদি আনইনস্টল করেন তবে আপনি এটি পূর্বে (বা কোনও পুরানো সংস্করণ) ইনস্টল করেছেন কিনা pip freezeতা দেখায় will boto3==1.0.1
জর্দান ম্যাকি

125

এটি প্রয়োজনীয়তাগুলিতে নয় এমন কিছু আনইনস্টল করা উচিত xt

pip freeze | grep -v -f requirements.txt - | grep -v '^#' | xargs pip uninstall -y

যদিও এটি ইনস্টল হওয়া প্যাকেজগুলির সাথে পুরোপুরি ঠিক কাজ করবে না -e, যেমন গিট সংগ্রহস্থল বা অনুরূপ। এগুলি এড়াতে, কেবল -eপতাকাটি দিয়ে শুরু প্যাকেজগুলি ফিল্টার করুন :

pip freeze | grep -v -f requirements.txt - | grep -v '^#' | grep -v '^-e ' | xargs pip uninstall -y

তারপরে, স্পষ্টত:

pip install -r requirements.txt

২০১ for সালের আপডেট: আপনি সম্ভবত সম্ভবত উপরোক্ত পদ্ধতির ব্যবহার করতে চান না। চেক আউট pip-toolsএবংpip-sync আপনি সম্ভবত অনেক শক্তসমর্থ উপায় না করতে খুঁজছি হয় কি সাধা।

https://github.com/nvie/pip-tools

মে, ২০১ for এর জন্য আপডেট:

আপনি এখন ব্যবহার করতে পারেন pip uninstall -r requirements.txt, তবে এটি মূলত বিপরীতটি সম্পাদন করে - এটি সমস্ত কিছু আনইনস্টল করেrequirements.txt

মে, 2019 এর জন্য আপডেট:

পরীক্ষা করে দেখুন pipenv । প্যাকেজ পরিচালনার জগতে অনেক কিছুই ঘটেছে যা এই ধরণের প্রশ্নটিকে কিছুটা অচল করে দেয়। যদিও আমি এখনও বেশ আনন্দের সাথে পাইপ-সরঞ্জামগুলি ব্যবহার করছি, যদিও।


4
সেটা ভালো হবে. আমার কাছে মনে হয় তারা যদি তাদের প্রয়োজনগুলি আপডেট না করে ম্যানুয়ালি একটি হোস্টে কিছু ইনস্টল করে তবে সমস্ত কিছু ভেঙে ডিভসকে তাদের নির্ভরতা সম্পর্কে সুস্পষ্ট হতে বাধ্য করার একটি ভাল উপায় বলে মনে হয় t ক্রিয়াকলাপটি কী পরিমাণ উত্পন্ন হবে তা আমি কীভাবে প্রতিক্রিয়া জানাতে চাই তাতে আগ্রহী।
স্টিফেন ফুহরি

এটা সঠিক উত্তর! আমি আমার এই করা project.configইলাস্টিক Beanstalk উপর জ্যাঙ্গো জন্য ফাইল: 05_pip_clean: command: "pip freeze | grep -v -f requirements.txt - | grep -v '^#' | xargs pip uninstall -y"। এখন আমি মন্তব্য ব্যবহার করে আমার পরিবেশ পুনর্নির্মাণ না করে পাইপ প্যাকেজগুলি রোলব্যাক করতে পারি requirements.txt। এটি আমাকে আসল ডাউনটাইম বাঁচাচ্ছে। ধন্যবাদ!
e.thompsy

পিপ ফ্রিজের আউটপুট কি কখনও শুরু হয়? অন্য কথায়, দ্বিতীয় গ্রেপ প্রয়োজনীয়?
xor

4
pip freezeমন্তব্য করেছে কিনা তা নিশ্চিত নয় তবে কোনও দিন তারা এটিকে এপিআইতে যুক্ত করতে পারে এবং যদি তারা তা করে তবে তা বৈধ হবে। যদি তারা তা না করে, তবে উপরেরটি কোনও অপশন নয়। ড্যাশ আপনাকে পূর্ববর্তী কমান্ড থেকে স্টিডিন ব্যবহার করতে দেয়, এক্ষেত্রে ড্যাশ pip freezepip freeze
গ্রেপকে

4
আমি অত্যন্ত পাইপ-সরঞ্জামগুলি সুপারিশ করেছি। +1
রন রোথম্যান

16

এটি কোনও বৈশিষ্ট্য নয় pip, না। আপনি যদি সত্যিই এ জাতীয় জিনিস চান তবে pip freezeআপনার আউটপুটটির সাথে তুলনা করার জন্য আপনি একটি স্ক্রিপ্ট লিখতে পারেন requirements.txt, তবে এটির মূল্যটি এর চেয়ে বেশি ঝামেলা হতে পারে।

ব্যবহার করে virtualenv, কেবল একটি পরিষ্কার পরিবেশ তৈরি করা সহজ এবং আরও নির্ভরযোগ্য এবং এর থেকে পুনরায় ইনস্টল করুন requirements.txt:

deactivate
rm -rf venv/
virtualenv venv/
source venv/bin/activate
pip install -r requirements.txt

6
কিছু প্যাকেজগুলির (পিআইএল, এলএক্সএমএল, ইত্যাদি) দীর্ঘ সংকলনের প্রয়োজন হলে কেবল প্রয়োজনীয় প্যাকেজগুলি আনইনস্টল করার জন্য এটি কার্যকর হতে পারে - বিশেষত যদি এটি ভার্চুয়াল পরিবেশ ব্যবহার করে এমন একটি লাইভ সার্ভারে ঘটে থাকে।
মেলিনাথ

@ মেলিনাথ যদি সেগুলি আপনার প্রয়োজনীয় ফাইলগুলিতে না থাকে এবং সেগুলি ইতিমধ্যে ইনস্টল করা থাকে তবে সংকলনটি আর কখনও ঘটবে না।
মাইকেল মায়ার

4
@ মিশেলমিয়ার - আপনি উত্তর না দিয়ে, পুরো ভার্চুয়ালেনভকে মুছে ফেলা না হলে, এই উত্তরটি সূচিত করে।
মেলিনাথ

4
@ মেলিনাথ তবে আপনি যদি ভার্চুয়ালেনভ মুছেন এবং প্যাকেজটির প্রয়োজন নেই (এবং আপনার মধ্যে নেই requirements.txt) তবে কেন এটি আবার ইনস্টল হবে?
মাইকেল মায়ার

4
@ মিশেলমিয়ার আমি আমার মূল মন্তব্যটি আরও স্পষ্ট করে বলার চেষ্টা করব। দেখে মনে হচ্ছে আপনি যে পয়েন্টটি তৈরি করছেন তা আপনি ভুল বুঝতে পেরেছেন। একটি সাধারণ প্রয়োজনীয় ফাইলের কল্পনা করুন যাতে পিআইএল এবং এলএক্সএমএল থাকে। তবে তারপরে আপনি স্থির করে নিন আপনার আর কোনও lxML প্রয়োজন নেই এবং আপনি এটি প্রয়োজনীয় ফাইলটি থেকে সরিয়ে ফেলুন। আপনি যদি এই উত্তরটির পরামর্শ অনুসারে করেন এবং ভার্চুয়ালেনভ মুছছেন, তারপরে আপনাকে পিআইএলটি পুনরায় ইনস্টল করতে হবে (এবং পুনরায় সংশোধন করতে হবে)। কেবলমাত্র lxML আনইনস্টল করার বিকল্পটি পাওয়া আরও দক্ষ হবে (যেমন প্রয়োজনীয় ফাইলগুলিতে সমস্ত প্যাকেজ নেই))
মেলিনাথ ২

11

আপনি এখন -r requirements.txtযুক্তিটি পাস করতে পারেন pip uninstall

pip uninstall -r requirements.txt -y

কমপক্ষে pip8.1.2 হিসাবে , pip help uninstallদেখায়:

...
Uninstall Options:
  -r, --requirement <file>    Uninstall all the packages listed in the given requirements file.  This option can be
                              used multiple times.
...

4
এটি ফাইলগুলিতে উপস্থিত না এমন প্যাকেজগুলি আনইনস্টল করে না। এটা তোলে প্যাকেজ যা আনইনস্টল না ফাইল প্রদর্শিত হবে।
মাইকেল মায়ার

4

এটি একটি পুরানো প্রশ্ন (তবে একটি ভাল) এবং এটি জিজ্ঞাসা করার পর থেকে বিষয়গুলি যথেষ্ট পরিবর্তিত হয়েছে।

pip-syncঅন্য উত্তরে একটি অফহ্যান্ড রেফারেন্স রয়েছে , তবে এটির নিজস্ব উত্তর প্রাপ্য, কারণ এটি ওপির সমস্যাটি সুনির্দিষ্টভাবে সমাধান করে।

requirements.txtপাইপ -সিঙ্কটি কোনও ফাইলকে ইনপুট হিসাবে নেয় এবং আপনার বর্তমান পাইথন পরিবেশটিকে "ট্রুস আপ" করে তোলে যাতে এটি এর মধ্যে ঠিক কী মেলে requirements.txt। এর মধ্যে এমন কোনও প্যাকেজ অপসারণ অন্তর্ভুক্ত রয়েছে যা আপনার এনভির উপস্থিত রয়েছে তবে অনুপস্থিত requirements.txt

উদাহরণ: ধরুন আমরা আমাদের env ধারণ (শুধুমাত্র) 3 লাইব্রেরি চাই: libA, libB, এবং libC, তাই মত:

> cat requirements.txt
libA==1.0
libB==1.1
libC==1.2

তবে আমাদের এনভিটিতে বর্তমানে রয়েছে libCএবং libD:

> pip freeze
libC==1.2
libD==1.3

চলমান পাইপ-সিঙ্কটি এর ফলে আসবে, যা ছিল আমাদের কাঙ্ক্ষিত চূড়ান্ত অবস্থা:

> pip-sync requirements.txt
> pip freeze
libA==1.0
libB==1.1
libC==1.2

সাবধান, যদি আপনার বিশ্বব্যাপী ইনস্টলড পাইপ-সরঞ্জাম থাকে তবে এটি আপনার বর্তমানে সক্রিয় করা ভার্চুয়ালেনভ আনইনস্টল করবে না ... এখনও অদ্ভুত, তবে অন্যথায় আমি জানি সবচেয়ে সোজা ফরোয়ার্ড প্রয়োজনীয়তা পরিচালনার সরঞ্জাম।
বেনজকজি

3

স্টিফেনের প্রস্তাবটি একটি দুর্দান্ত ধারণা, তবে দুর্ভাগ্যক্রমে আপনি যদি আপনার ফাইলটিতে সরাসরি প্রয়োজনীয়তা অন্তর্ভুক্ত করেন তবে এটি কার্যকর হয় না, যা আমার কাছে পরিষ্কার মনে হয়।

সমস্ত নির্ভরতা নিজেই distributeভেঙে দেওয়া এমনকি সমাপ্ত সহ আনইনস্টল করা হবে pip

ভার্চুয়াল পরিবেশটি ট্র্যাক করার সময় একটি পরিষ্কার প্রয়োজনীয় ফাইল বজায় রাখা

এখানে আমি কীভাবে আমার ভার্চুয়াল পরিবেশটিকে ভার্সন-ট্র্যাক করার চেষ্টা করব। আমি requirements.txtকেবলমাত্র সরাসরি প্রয়োজনীয়তা সহ ন্যূনতম বজায় রাখার চেষ্টা করি এবং আমি নিশ্চিত নই এমন সংস্করণে বাধাও উল্লেখ করি না।

তবে এর সাথে আমি সংস্করণ ট্র্যাকিং (গিট বলুন) অন্তর্ভুক্ত করি, একটি venv.pipফাইলের মধ্যে আমার ভার্চুয়ালেনভের আসল অবস্থা ।

এখানে একটি নমুনা কর্মপ্রবাহ:


সংস্করণ ট্র্যাকিং সহ ভার্চুয়ালেনভ ওয়ার্কস্পেস সেটআপ করুন:

mkdir /tmp/pip_uninstalling
cd /tmp/pip_uninstalling
virtualenv venv
. venv/bin/activate

সংস্করণ ট্র্যাকিং সিস্টেম আরম্ভ করুন:

git init
echo venv > .gitignore
pip freeze > venv.pip
git add .gitignore venv.pip
git commit -m "Python project with venv"

নির্ভরতা সহ একটি প্যাকেজ ইনস্টল করুন, এটি প্রয়োজনীয় ফাইলটিতে অন্তর্ভুক্ত করুন:

echo flask > requirements.txt
pip install -r requirements.txt
pip freeze > venv.pip

এখন আপনার অ্যাপ তৈরি করা শুরু করুন, তারপরে কমিট করুন এবং একটি নতুন শাখা শুরু করুন:

vim myapp.py
git commit -am "Simple flask application"
git checkout -b "experiments"

অতিরিক্ত প্যাকেজ ইনস্টল করুন:

echo flask-script >> requirements.txt
pip install -r requirements.txt
pip freeze > venv.pip

... এটি নিয়ে খেলুন এবং তারপরে আগের সংস্করণে ফিরে আসুন

vim manage.py
git commit -am "Playing with flask-script"
git checkout master

এখন বহির্মুখী প্যাকেজ আনইনস্টল করুন:

pip freeze | grep -v -f venv.pip | xargs pip uninstall -y

আমি মনে করি প্রক্রিয়াটি গিট হুক দিয়ে স্বয়ংক্রিয় করা যেতে পারে, তবে আসুন বিষয়টির দিকে যাওয়া উচিত নয়।

অবশ্যই, কিছু প্যাকেজ ক্যাচিং সিস্টেম বা পিপ 2 পিআই এর মতো স্থানীয় সংগ্রহস্থল ব্যবহার করার পরে তা বোঝা যায়


2

পিগজিব্যাকিং অফ স্টিফেন-জে ফুহরি এখানে আমি ব্যবহার করছি পাওয়ারশেলের সমতুল্য:

pip freeze | ? { $_ -notmatch ((gc req.txt) -join "|") }

0

যদিও এটি সরাসরি প্রশ্নের উত্তর দেয় না, requirements.txtএখনকার চেয়ে ভাল বিকল্প হ'ল একটি Pipfile। এটি রুবির মতোই কাজ করে Gemfile। বর্তমানে, আপনাকে এই pipenvসরঞ্জামটি ব্যবহার করা দরকার তবে আশা করি এটি শেষ পর্যন্ত অন্তর্ভুক্ত হয়ে যাবে pip। এটি pipenv cleanকমান্ড সরবরাহ করে যা আপনি যা চান তা করে।

(দ্রষ্টব্য আপনি যদি একটি বিদ্যমান আমদানি করতে পারেন যে requirements.txtসঙ্গে pipenv install -r requirements.txt। এরপর আপনি একটি থাকতে হবে Pipfileএবং requirements.txtমুছে ফেলা হতে পারে।)


-3

এটি এখন ব্যবহার করে সম্ভব:

pip uninstall -r requirements.txt

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