मैं अपने एक virtualenvs को ठीक करने की कोशिश कर रहा हूं - मैं उन सभी स्थापित पुस्तकालयों को रीसेट करना चाहता हूं जो उत्पादन से मेल खाते हैं।
क्या पाइप के साथ ऐसा करने का एक त्वरित और आसान तरीका है?
मैं अपने एक virtualenvs को ठीक करने की कोशिश कर रहा हूं - मैं उन सभी स्थापित पुस्तकालयों को रीसेट करना चाहता हूं जो उत्पादन से मेल खाते हैं।
क्या पाइप के साथ ऐसा करने का एक त्वरित और आसान तरीका है?
जवाबों:
मैंने इस स्निपेट को वैकल्पिक समाधान के रूप में पाया है। यह virtualenv की रीमेकिंग की तुलना में लाइब्रेरियों को हटाने का एक अधिक सुंदर तरीका है:
pip freeze | xargs pip uninstall -y
यदि आपके पास वीसीएस के माध्यम से स्थापित पैकेज हैं, तो आपको उन पंक्तियों को बाहर करने और पैकेजों को मैन्युअल रूप से निकालने की आवश्यकता है (नीचे दी गई टिप्पणियों से ऊपर उठाया गया):
pip freeze | grep -v "^-e" | xargs pip uninstall -y
postactivate
जो बने रहेंगे।
setuptools
पैकेज को हटा दिया । मैंने निर्देशों का पालन करते हुए इस मुद्दे को हल किया: stackoverflow.com/questions/7446187/…
pip freeze --exclude-editable | xargs pip uninstall -y
बिना grep पैटर्न का उपयोग किए बिना VCS पैकेजों को अनदेखा करने के लिए भी उपयोग कर सकते हैं
यह सभी मैक, विंडोज और लिनक्स सिस्टम के लिए काम करेगा। आवश्यकताओं में सभी पाइप पैकेजों की सूची प्राप्त करने के लिए। Txt फ़ाइल (नोट: यह आवश्यकताओं को अधिलेखित कर देगा। यदि मौजूद है तो नया भी बनाएगा, यदि आप पुरानी आवश्यकताओं को बदलना नहीं चाहते हैं। तो फिर अलग फ़ाइल नाम दें सभी निम्नलिखित आदेश जगह आवश्यकताओं में।
pip freeze > requirements.txt
अब एक-एक को हटाने के लिए
pip uninstall -r requirements.txt
अगर हम एक बार में सभी को हटाना चाहते हैं
pip uninstall -r requirements.txt -y
यदि आप किसी मौजूदा प्रोजेक्ट पर काम कर रहे हैं, जिसमें एक requirements.txt
फ़ाइल है और आपके वातावरण में परिवर्तन हो गया है, तो बस requirements.txt
उपरोक्त उदाहरणों से बदलें toberemoved.txt
। फिर, एक बार जब आप ऊपर दिए गए चरणों से गुजरते हैं, तो आप requirements.txt
अपने अब के स्वच्छ वातावरण को अपडेट करने के लिए उपयोग कर सकते हैं ।
और किसी भी फाइल को बनाए बिना सिंगल कमांड के लिए (जैसा कि @joeb ने सुझाव दिया है)।
pip uninstall -y -r <(pip freeze)
pip uninstall -r requirements.txt -y
pip uninstall -y -r <(pip freeze)
एक बार में सब कुछ करने के लिए उपयोग कर सकते हैं।
यह नवीनतम के साथ काम करता है। मुझे लगता है कि ऐसा करने का यह सबसे छोटा और सबसे घोषित तरीका है।
virtualenv --clear MYENV
लेकिन आमतौर पर मैं बस अपरिवर्तनीय नियमों के बाद से virtualenv को हटा देता हूं और फिर से बनाता हूं!
wipeenv
? virtualenvwrapper.readthedocs.org/en/latest/…
wipeenv
पर्यावरण के भीतर एक त्रुटि फेंकता है और किसी भी चीज को नहीं हटाता है यदि pip install -e
विकास बिल्ड के संदर्भ में उपयोग किया जाता है, तो उपयोग करने का प्रयास virtualenv --clear MYENV
एक त्रुटि नहीं फेंकता है और कोई भी नहीं निकालता है पैकेज जो आपने पहले पर्यावरण में स्थापित किए होंगे। कम से कम OSX पर ऐसा ही है। अधिक जानकारी के लिए bitbucket.org/dhellmann/virtualenvwrapper/issues/211/… देखें ।
wipeenv
virtualenvwrapper द्वारा प्रदान किया गया एक उपनाम है, इसलिए हर किसी के पास नहीं है।
मैं इस उत्तर को एक टिप्पणी अनुभाग से ऊपर उठाना चाहता था क्योंकि यह थ्रेड में सबसे सुरुचिपूर्ण समाधानों में से एक है। इस उत्तर का पूरा श्रेय @joeb को जाता है ।
pip uninstall -y -r <(pip freeze)
यह एक virtualenv के संदर्भ के बाहर मेरे उपयोगकर्ता संकुल फ़ोल्डर को साफ़ करने के उपयोग के मामले में मेरे लिए बहुत अच्छा काम किया, जो ऊपर दिए गए कई उत्तरों को नहीं संभालता है।
संपादित करें: किसी को पता है कि इस कमांड को मेकफाइल में कैसे काम करना है?
सुविधा के लिए मैं इसे अपने bash प्रोफ़ाइल में जोड़ता हूं:
alias pipuninstallall="pip uninstall -y -r <(pip freeze)"
फिर भागो:
pipuninstallall
यदि आप पिपेनव का उपयोग करते हैं तो आप बस चला सकते हैं:
pipenv uninstall --all
pip freeze
यदि कोई पैकेज स्थापित नहीं होता है, तो कुछ भी आउटपुट में परिणाम होता है, और फिर pip uninstall
शिकायत करता है, दुर्भाग्य से)।
<(...)
एक बशीवाद है। तो आप या तो bash -c "..." का उपयोग कर सकते हैं, या pip freeze | pip uninstall -r /dev/stdin
ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
अन्य उत्तर जो उपयोग करते हैं pip list
या pip freeze
इसमें शामिल होने चाहिए,--local
वे उन पैकेजों की भी स्थापना रद्द करेंगे जो सामान्य नामस्थान में पाए जाते हैं।
तो यहाँ स्निपेट मैं नियमित रूप से उपयोग कर रहे हैं
pip freeze --local | xargs pip uninstall -y
संदर्भ: pip freeze --help
ERROR: Cannot uninstall 'bitarray'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.
:। तब मैं किसी भी अधिक मॉड्यूल की स्थापना रद्द नहीं कर सका।
pip freeze
)pip freeze | xargs pip uninstall -y
pip list
)pip list | awk '{print $1}' | xargs pip uninstall -y
virtualenv
)virtualenv --clear MYENV
pip list
) तब तक बहुत अच्छा काम करती है जब तक कि आपके पास गलती से स्वयं को अनइंस्टॉल न करें -_-
सबसे तेज़ तरीका है वर्चुअन को पूरी तरह से रीमेक करना। मैं मान रहा हूँ कि आपके पास एक आवश्यकता है। फ़ाइल जो उत्पादन से मेल खाती है, यदि नहीं:
# On production:
pip freeze > reqs.txt
# On your machine:
rm $VIRTUALENV_DIRECTORY
mkdir $VIRTUALENV_DIRECTORY
pip install -r reqs.txt
मैंने निम्नलिखित कार्य करके इसे प्रबंधित किया:
वर्तमान में स्थापित संकुल सूची के साथ reqs.txt नामक आवश्यकताएँ फ़ाइल बनाएँ
pip freeze > reqs.txt
फिर reqs.txt से सभी पैकेजों की स्थापना रद्द करें
pip uninstall \
-y # remove the package with prompting for confirmation
-r reqs.txt
मुझे यह तरीका पसंद है क्योंकि आपके पास हमेशा एक गलती करने के लिए एक पाइप आवश्यकताओं की फाइल होनी चाहिए। यह भी दोहराने योग्य है।
विंडोज पर अगर आपका path
सही तरीके से कॉन्फ़िगर किया गया है, तो आप उपयोग कर सकते हैं:
pip freeze > unins && pip uninstall -y -r unins && del unins
यह यूनिक्स जैसी प्रणालियों के लिए एक समान मामला होना चाहिए:
pip freeze > unins && pip uninstall -y -r unins && rm unins
बस एक चेतावनी कि यह पूरी तरह से ठोस नहीं है क्योंकि आप 'फ़ाइल नहीं मिली' जैसे मुद्दों में भाग सकते हैं, लेकिन यह कुछ मामलों में फिर भी काम कर सकता है
संपादित करें: स्पष्टता के लिए: unins
एक मनमानी फ़ाइल है जिसमें यह कमांड निष्पादित होने पर उसके पास डेटा लिखा होता है:pip freeze > unins
वह फ़ाइल जिसे वह बदले में लिखता है, का उपयोग उपरोक्त सहमति / पूर्व अनुमोदन के साथ उपरोक्त पैकेजों की स्थापना रद्द करने के लिए किया जाता है pip uninstall -y -r unins
फ़ाइल पूरी होने पर अंततः हटा दी जाती है।
इसका एक पुराना सवाल जो मुझे पता है, लेकिन मैंने इस पर ठोकर खाई थी ताकि भविष्य में संदर्भ के लिए आप ऐसा कर सकें:
pip uninstall [options] <package> ...
pip uninstall [options] -r <requirements file> ...
-r, - पूछताछ फ़ाइल
दी गई आवश्यकताओं फ़ाइल में सूचीबद्ध सभी संकुल को अनइंस्टॉल करें। इस विकल्प का उपयोग कई बार किया जा सकता है।
से पिप प्रलेखन संस्करण 8.1
(इसे उत्तर के रूप में जोड़ना, क्योंकि मेरे पास @blueberryfields के उत्तर पर टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है)
@blueberryfields का उत्तर अच्छी तरह से काम करता है, लेकिन अगर कोई स्थापना रद्द करने के लिए कोई पैकेज नहीं है (जो एक समस्या हो सकती है अगर यह "सभी को अनइंस्टॉल करना" स्क्रिप्ट या मेकफाइल का हिस्सा है)। xargs -r
जीएनयू के संस्करण का उपयोग करते समय इसे हल किया जा सकता है xargs
:
pip freeze --exclude-editable | xargs -r pip uninstall -y
से man xargs
:
-आर, -नो-रन-इफ-खाली
यदि मानक इनपुट में कोई भी गैर-फ़िल्टर नहीं है, तो कमांड न चलाएँ। आम तौर पर, इनपुट न होने पर भी एक बार कमांड चलाया जाता है। यह विकल्प GNU एक्सटेंशन है।
केवल उपयोग करके क्रॉस-प्लेटफ़ॉर्म समर्थन pip
:
#!/usr/bin/env python
from sys import stderr
from pip.commands.uninstall import UninstallCommand
from pip import get_installed_distributions
pip_uninstall = UninstallCommand()
options, args = pip_uninstall.parse_args([
package.project_name
for package in
get_installed_distributions()
if not package.location.endswith('dist-packages')
])
options.yes = True # Don't confirm before uninstall
# set `options.require_venv` to True for virtualenv restriction
try:
print pip_uninstall.run(options, args)
except OSError as e:
if e.errno != 13:
raise e
print >> stderr, "You lack permissions to uninstall this package.
Perhaps run with sudo? Exiting."
exit(13)
# Plenty of other exceptions can be thrown, e.g.: `InstallationError`
# handle them if you want to.
आसान मजबूत तरीका क्रॉस-प्लेटफ़ॉर्म और पाइपेनव में काम करना है:
pip freeze
pip uninstall -r requirement
पिपेनव द्वारा:
pipenv run pip freeze
pipenv run pip uninstall -r requirement
लेकिन पिपलॉक या पिपलफाइल को अपडेट नहीं करेंगे ताकि जागरूक रहें
यदि आप चला रहे हैं virtualenv
:
virtualenv --clear </path/to/your/virtualenv>
उदाहरण के लिए, यदि आपका virtualenv है /Users/you/.virtualenvs/projectx
, तो आप चलाएंगे:
virtualenv --clear /Users/you/.virtualenvs/projectx
यदि आपको नहीं पता कि आपका वर्चुअल एनवी कहां स्थित है, तो आप which python
पथ प्राप्त करने के लिए एक सक्रिय वर्चुअल एनवी के भीतर से चला सकते हैं
मेरे मामले में, मैंने गलती से pip
macOS पर होमब्रेव -इंस्टॉल का उपयोग करके विश्व स्तर पर कई पैकेज स्थापित किए थे। डिफ़ॉल्ट पैकेजों पर वापस जाने का सबसे आसान तरीका एक सरल था:
$ brew reinstall python
या, यदि आप उपयोग कर रहे थे pip3
:
$ brew reinstall python3
में कमान शैल Windows के, आदेश
pip freeze | xargs pip uninstall -y
काम नहीं करेगा। तो आप विंडोज का उपयोग करने वालों के लिए, मैंने ऐसा करने का एक वैकल्पिक तरीका निकाला है।
pip freeze
एक .txt फ़ाइल में करें।pip uninstall -r *textfile.txt*
यदि आप उपयोग कर रहे हैं pew
, तो आप wipeenv कमांड का उपयोग कर सकते हैं :
pew wipeenv [env]
पिप को यह जानने का कोई तरीका नहीं है कि आपके सिस्टम के पैकेज मैनेजर द्वारा कौन से पैकेज इंस्टॉल किए गए हैं और कौन से पैकेज इंस्टॉल किए गए हैं। इसके लिए आपको कुछ ऐसा करने की आवश्यकता होगी
आरपीएम-आधारित डिस्ट्रोस के लिए (अपने अजगर संस्करण के साथ python2.7 बदलें) आपने पाइप स्थापित किया है:
find /usr/lib/python2.7/ |while read f; do
if ! rpm -qf "$f" &> /dev/null; then
echo "$f"
fi
done |xargs rm -fr
डिबेट-आधारित वितरण के लिए:
find /usr/lib/python2.7/ |while read f; do
if ! dpkg-query -S "$f" &> /dev/null; then
echo "$f"
fi
done |xargs rm -fr
फिर खाली निर्देशिका को साफ करने के लिए:
find /usr/lib/python2.7 -type d -empty |xargs rm -fr
मैंने शीर्ष उत्तर को बहुत भ्रामक पाया क्योंकि यह आपके वितरण से सभी (अधिकांश?) अजगर संकुल को हटा देगा और संभवतः आपको एक टूटी हुई प्रणाली के साथ छोड़ देगा।
dpkg-query -S '/usr/lib/python2.7/*'
, dpkg-query -L
संबंधित फ़ाइलों को डंप करने के लिए नामों और प्रत्येक नाम को निकालें ? इसमें पहले से ही मैनिफ़ेस्ट्स तैयार किए गए हैं। मेरी मुख्य आपत्ति यह है कि आपके द्वारा कहीं भी स्थापित किए गए पैकेजों को लक्षित करने के बजाय, आपके द्वारा अपेक्षित प्रबंधक के अलावा किसी और द्वारा स्थापित पैकेजों को लक्षित किया गया है, और उस स्थान पर जो आमतौर पर पाइप को स्पर्श नहीं करना चाहिए। pip list -l
संकुल को स्थानीय रूप से स्थापित करता है, और कुछ को सूचीबद्ध भी करेगा pip install --target=...
। वर्तमान में खाली डायरों को हटाने से आपको भी काट दिया जाएगा!