पाइप सफलतापूर्वक पैकेज स्थापित करता है, लेकिन कमांड लाइन से निष्पादन योग्य नहीं मिला


113

मैं मैक ओएस एक्स योसेमाइट पर काम कर रहा हूं, 10.10.3 संस्करण।

मैंने python2.7 और macport का उपयोग करके स्थापित किया जैसा कि http://johnlaudun.org/20150512-installing-and-setting-pip-with-macports/ में किया गया है।

मैं सफलतापूर्वक पैकेजों को स्थापित कर सकता हूं और उन्हें अपने अजगर पर्यावरण और अजगर लिपियों के अंदर आयात कर सकता हूं। हालाँकि किसी भी निष्पादन योग्य पैकेज से संबंधित जिसे टर्मिनल में कमांड लाइन से बुलाया जा सकता है, नहीं मिलता है।

क्या किसी को पता है कि क्या गलत हो सकता है? (नीचे और अधिक)

उदाहरण के लिए, http://wiki.ros.org/jade/Installion/Source के निर्देशानुसार "rosdep" नामक पैकेज स्थापित करते समय

मैं चला सकता हूं: sudo pip install -U rosdep जो त्रुटियों के बिना स्थापित होता है और संबंधित फाइलें अंदर स्थित होती हैं/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

हालाँकि अगर मैं चलाने की कोशिश करता हूँ: sudo rosdep initयह एक त्रुटि देता है:"sudo: rosdep: command not found"

यह एक पैकेज विशिष्ट त्रुटि नहीं है। मुझे यह मेरे कंप्यूटर पर पाइप का उपयोग करके स्थापित किसी भी पैकेज के लिए मिलता है। मैंने भी जोड़ने की कोशिश की

/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

मेरे लिए $PATH। लेकिन कमांड लाइन पर निष्पादन योग्य नहीं पाए जाते हैं, भले ही पैकेज अजगर के भीतर से पूरी तरह से काम करते हैं।


किसी भी virtualenv शामिल?
जेएल पाइरेट

नहीं, कोई virtualenv शामिल नहीं है।
साकेत_दिवले

जब आप sudo करते हैं, तो आप रूट उपयोगकर्ता के $ PATH पर स्विच करते हैं, बस यह सुनिश्चित करें कि उसका PATH अपडेट किया गया है, न कि आपका PATH
एंथनी पेरोट

जवाबों:


48

अपने $ पेट की जाँच करें

tox एक कमांड लाइन मोड है:

audrey:tests jluc$ pip list | grep tox
tox (2.3.1)

वह कहां है?

(संपादित करें: 2.7सामान यहां बहुत ज्यादा मायने नहीं रखता है, किसी भी उप में 3.xऔर पाइप का व्यवहार बहुत ही समान है)

audrey:tests jluc$ which tox
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/tox

और मेरे $ PATH में क्या है?

audrey:tests jluc$ echo $PATH
/opt/chefdk/bin:/opt/chefdk/embedded/bin:/opt/local/bin:..../opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin...

/Opt/local/Library/Frameworks/Python.framework/Versions/2.7 -bin नोटिस करें ? यही कारण है कि मेरे पाइप स्थापित सामान खोजने की अनुमति देता है

अब, यह देखने के लिए कि पायथन से चीजें कहां हैं, ऐसा करने का प्रयास करें (विकल्प के rosdepलिए tox)।

$python
>>> import tox
>>> tox.__file__

यह प्रिंट करता है:

'/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/tox/__init__.pyc'

अब, ऊपर दी गई डायरेक्टरी में cdlib ऊपर। क्या आप एक बिन निर्देशिका देखते हैं ? क्या आप rosdepउस बिन में देखते हैं ? यदि ऐसा है तो binअपने $ PATH को जोड़ने का प्रयास करें।

audrey:2.7 jluc$ cd /opt/local/Library/Frameworks/Python.framework/Versions/2.7
audrey:2.7 jluc$ ls -1

उत्पादन:

Headers
Python
Resources
bin
include
lib
man
share

उत्तर के लिए धन्यवाद जेएल, लेकिन यह मुख्य रूप से मेरी समस्या है। मेरे उदाहरण ऐप rosdep के लिए, जब मैं आपके द्वारा किया गया था, तो यहां प्राप्त आउटपुट है: पाइप सूची | grep rosdep rosdep (0.11.4) जो rosdep (कोई आउटपुट नहीं) है, कमांड लाइन कुछ भी वापस नहीं करता है
Sanket_Diwale

1
जो नहीं लौट रहा है rosdepवह आपके मुद्दे के अनुरूप है। मेरा कहना है कि आपको यह पता लगाने की आवश्यकता है कि कहाँ rosdepस्थापित है और $ PATH कैसा दिखता है।
JL Peyret

धन्यवाद, मेरे पास मेरी बायनेरिज़ को /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin में स्थापित किया जा रहा था। PATH में जोड़ा गया और अब इसका काम कर रहा है। धन्यवाद, मुझे बायनेरिज़ का पता लगाने में परेशानी हो रही थी, क्योंकि यह कोई आउटपुट नहीं दे रहा था।
संवत्_दिवले

निर्यात पथ = / ऑप्ट / स्थानीय / पुस्तकालय / फ्रेमवर्क / पायथन.फ्रेमवर्क / संस्करण / 2.7 / बिन: $ पथ मेरे रास्तों पर गायब था और मेरे लिए OSX पर चाल चली
Caio Iglesias

1
यदि आपको प्रोग्राम नहीं मिल रहा है which(यदि यह अभी तक आपके रास्ते में नहीं है), तो आप mlocateलिनक्स mdfindपर या मैकओएस पर बाइनरी का उपयोग करने की कोशिश कर सकते हैं ।
22 अक्टूबर को जैककॉगिल

54

डिफ़ॉल्ट python स्थापना के साथ macOS पर आपको /Users/<you>/Library/Python/2.7/bin/अपने $ PATH को जोड़ना होगा।

इसे अपने .bash_profile में जोड़ें:

export PATH="/Users/<you>/Library/Python/2.7/bin:$PATH"

यही पर पाइप निष्पादन योग्य स्थापित करता है।

टिप: अपने डिफ़ॉल्ट which pythonस्थापना के स्थान को खोजने के लिए गैर-डिफ़ॉल्ट अजगर संस्करण के लिए और ऊपर के पथ में उस हिस्से को बदलें। (संकेत Sanket_Diwale के लिए धन्यवाद)


8
जिस स्थान पर पाइप स्थापित होता है वह इस बात पर निर्भर करता है कि आपने अजगर को कैसे स्थापित किया है, मैकओएस में मैकपोर्ट, होमब्रे और सिस्टम डिफ़ॉल्ट जैसे अजगर को स्थापित करने के कई तरीके हैं। अजगर के किस संस्करण का उपयोग किया जा रहा है इसके आधार पर, आपके पास पाइप के लिए अलग-अलग स्थान होंगे। यह पता लगाने का एक आसान तरीका है कि जहां पाइप और अजगर स्थित हैं, वे टर्मिनल में "कौन सा अजगर" का उपयोग करेंगे और फिर $ PATH में उपयुक्त स्थान जोड़ेंगे।
संचित_दिवस

MacOS 10.14.3 के लिए python.org से पायथन 3.6 स्थापित करना, which python3आखिरकार मुझे (एक लिंक के माध्यम से) ले गया /Library/Frameworks/Python.framework/Versions/3.6/bin/
फीनिक्स

42

यदि आप --user(उदाहरण के लिए pip3.6 install --user tmuxp) का उपयोग कर स्थापित कर रहे हैं , तो प्लेटफ़ॉर्म-विशिष्ट उपयोगकर्ता को siteमॉड्यूल का उपयोग करके पायथन से ही निर्देशिका को स्थापित करना संभव है । उदाहरण के लिए, macOS पर:

$ python2.7 -m site --user-base
/Users/alexp/Library/Python/2.7

/binइसे जोड़कर , अब हमारे पास वह रास्ता है जहां पैकेज निष्पादन योग्य स्थापित किए जाएंगे। हम आउटपुट के आधार पर आपके शेल की आरसी फ़ाइल में PATH को गतिशील रूप से पॉप्युलेट कर सकते हैं; मैं बैश का उपयोग कर रहा हूं, लेकिन किसी भी भाग्य के साथ यह पोर्टेबल है:

# Add Python bin directories to path
python3.6 -m site &> /dev/null && PATH="$PATH:`python3.6 -m site --user-base`/bin"
python2.7 -m site &> /dev/null && PATH="$PATH:`python2.7 -m site --user-base`/bin"

मैं सटीक पायथन संस्करणों का उपयोग करता हूं ताकि निष्पादन योग्य होने की संभावना कम हो जाए जब "गायब" हो जाए, जब पायथन मामूली संस्करण को अपग्रेड करता है, जैसे 3.5 से 3.6। वे गायब हो जाएंगे, क्योंकि जैसा कि ऊपर देखा जा सकता है, उपयोगकर्ता स्थापना पथ में पायथन संस्करण शामिल हो सकता है। तो जबकि python33.5 या 3.6 को इंगित कर सकता है, python3.6हमेशा 3.6 को इंगित करेगा। जब आगे संकुल स्थापित करने, जैसे का उपयोग इस जरूरतों को ध्यान में रखा जा करने के लिए pip3.6खत्म हो गया pip3

यदि आपको गायब होने वाले पैकेज का विचार बुरा नहीं है, तो आप इसका उपयोग कर सकते हैं python2और python3इसके बजाय:

# Add Python bin directories to path
# Note: When Python is upgraded, packages may need to be re-installed
#       or Python versions managed.
python3 -m site &> /dev/null && PATH="$PATH:`python3 -m site --user-base`/bin"
python2 -m site &> /dev/null && PATH="$PATH:`python2 -m site --user-base`/bin"

25

मुझे पता है कि सवाल macOS के बारे में पूछता है, लेकिन यहां लिनक्स उपयोगकर्ताओं के लिए एक समाधान है जो Google के माध्यम से यहां पहुंचते हैं।

मुझे इस प्रश्न में वर्णित समस्या हो रही थी, जिसमें पीएफएक्स पैकेज को पाइप के माध्यम से स्थापित किया गया था ।

जब मैंने इसे चलाया, लेकिन कुछ भी नहीं ...

pip list | grep pdfx
pdfx (1.3.0)

फिर भी:

which pdfx
pdfx not found

लिनक्स पर समस्या यह है कि pip install ... स्क्रिप्ट को ड्राप करता है ~/.local/binऔर यह डिफ़ॉल्ट डेबियन / उबंटू पर नहीं है $PATH

यहाँ एक GitHub मुद्दा अधिक विस्तार में जा रहा है: https://github.com/pypa/pip/issues/3813

ठीक करने के लिए, बस ~/.local/binअपने को जोड़ें $PATH, उदाहरण के लिए अपने में निम्नलिखित पंक्ति जोड़कर.bashrc फ़ाइल :

export PATH="$HOME/.local/bin:$PATH"

उसके बाद, अपने शेल को पुनरारंभ करें और चीजों को अपेक्षा के अनुसार काम करना चाहिए।


2
अपने शेल को फिर से शुरू करने के बजाय, आप कॉन्फ़िगरेशन source ~/.bashrcको फिर से लोड कर सकते हैं.bashrc
Whiteclaws

1
महान। मुझे "जहरीली आज्ञा नहीं मिली" मिल रही थी। PATH को अपडेट करने के बाद यह काम करता है
GabrielBB

8

उपाय

अन्य उत्तरों के आधार पर, आप linuxऔर macआप निम्नलिखित को चला सकते हैं:

echo "export PATH=\"`python3 -m site --user-base`/bin:$PATH\"" >> ~/.bashrc
source ~/.bashrc

के बजाय python3: आप अजगर संस्करण के लिए किसी भी अन्य लिंक का उपयोग कर सकते हैं python, python2.7, python3.6, python3.9, आदि

व्याख्या

वर्तमान ओएस (जीत, मैक, लिनक्स) में उपयोगकर्ता पैकेज कहां स्थापित किए गए हैं, यह जानने के लिए, हम चलाते हैं:

python3 -m site --user-base

हम जानते हैं कि स्क्रिप्ट उस bin/फ़ोल्डर में जाती हैं जहाँ पैकेज स्थापित होते हैं।

इसलिए हम रास्तों को बदलते हैं:

echo `python3 -m site --user-base`/bin

फिर हम एक पर्यावरण चर के लिए निर्यात करते हैं।

export PATH=\"`python3 -m site --user-base`/bin:$PATH\""

अंत में, निर्यात कमांड को दोहराने से बचने के लिए हम इसे अपनी .bashrcफ़ाइल में जोड़ते हैं और हम sourceनए बदलावों को चलाने के लिए दौड़ते हैं, जिससे हमें शुरुआत में बताए गए समाधान का पता चलता है।


@ बेंजामिन ने एक स्पष्टीकरण जोड़ा, आशा है कि यह मदद करता है, सौभाग्य!
विलेमो

3

विंडोज पर, आपको %USERPROFILE%\AppData\Roaming\Python\Scriptsअपने पथ पर पथ जोड़ने की आवश्यकता है ।


2

मैं इस प्रश्न पर अड़ गया क्योंकि मैंने एक PyPI पैकेज बनाया, सफलतापूर्वक बनाया और प्रकाशित किया, लेकिन स्थापना के बाद इसे निष्पादित नहीं किया जा सका। $PATHचर सही ढंग से स्थापित किया गया था।

मेरे मामले में समस्या यह थी कि मैंने फ़ाइल entry_pointमें सेट नहीं किया था setup.py:

entry_points = {'console_scripts':

['YOUR_CONSOLE_COMMAND=MODULE_NAME.FILE_NAME:FUNCTION_NAME'],},

2

अजगर की binनिर्देशिका को $PATHचर में जोड़ने के अलावा , मुझे उस निर्देशिका के मालिक को भी बदलना पड़ा, ताकि वह काम कर सके। पता नहीं क्यों मैं पहले से ही मालिक नहीं था।

chown -R ~/Library/Python/

1

जब आप MacOS इंस्टॉलर (पायथन वेबसाइट से डाउनलोड) का उपयोग करके पायथन या पायथन 3 स्थापित करते हैं - तो यह exportआपकी ~/.profileस्क्रिप्ट में एर जोड़ता है । बस आपको सिर्फ इतना करना हैsource करना है। सभी टर्मिनलों को फिर से चालू करके भी चाल चलनी चाहिए।

चेतावनी - मेरा मानना ​​है कि भविष्य में लाभ के लिए पाइथन 3 के साथ सिर्फ पाइप 3 का उपयोग करना बेहतर है।

यदि आपके पास पहले से ही Python3 स्थापित है, तो निम्न चरण मेरे लिए macOS Mojave पर काम करते हैं:

  1. पहली बार उपयोग कर स्थापित करें sudo-sudo -H pip3 install ansible

  2. आप पाइथन के binपथ के लिए एक सिमलिंक बनाते हैं

sudo ln -s /Library/Frameworks/Python.framework/Versions/Current/bin /Library/Frameworks/Python.framework/current_python_bin

और इसे स्टेपल करें .profile

export PATH=$PATH:/Library/Frameworks/Python.framework/current_python_bin

  1. source ~/.profileसभी टर्मिनल गोले चलाएं और पुनः आरंभ करें।

  2. प्रकार ansible --version


एक cmdline अजगर पैकेज को स्थापित करने के लिए pip3 का उपयोग करने के बाद अपने प्रारंभिक विवरण के लिए +1 (बस फिर से चलाएँ। प्रवेश या लॉग आउट करें और वापस)।
स्वचालित
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.