pip ติดตั้งแพ็กเกจสำเร็จ แต่ไม่พบไฟล์ปฏิบัติการจากบรรทัดคำสั่ง


122

ฉันกำลังทำงานบน mac OS X Yosemite เวอร์ชัน 10.10.3

ฉันติดตั้ง python2.7 และ pip ​​โดยใช้ macport ตามที่ทำใน http://johnlaudun.org/20150512-installing-and-setting-pip-with-macports/

ฉันสามารถติดตั้งแพ็กเกจสำเร็จและนำเข้าภายในสภาพแวดล้อม python และสคริปต์ python ของฉัน อย่างไรก็ตามไม่พบไฟล์ปฏิบัติการใด ๆ ที่เกี่ยวข้องกับแพ็กเกจที่สามารถเรียกได้จากบรรทัดคำสั่งในเทอร์มินัล

ไม่มีใครรู้ว่ามีอะไรผิดปกติหรือไม่? (รายละเอียดเพิ่มเติมด้านล่าง)

ตัวอย่างเช่นขณะติดตั้งแพคเกจชื่อ "rosdep" ตามคำแนะนำในhttp://wiki.ros.org/jade/Installation/Source

ฉันสามารถเรียกใช้: 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"

นี่ไม่ใช่ข้อผิดพลาดเฉพาะแพ็คเกจ ฉันได้รับสิ่งนี้สำหรับแพ็คเกจใด ๆ ที่ติดตั้งโดยใช้ pip บนคอมพิวเตอร์ของฉัน ฉันยังพยายามเพิ่ม

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

ไปที่$PATH. แต่ไม่พบไฟล์ปฏิบัติการในบรรทัดคำสั่งแม้ว่าแพ็กเกจจะทำงานได้อย่างสมบูรณ์แบบจากภายใน python


Virtualenv ใด ๆ ที่เกี่ยวข้อง?
JL Peyret

ไม่ไม่มีส่วนเกี่ยวข้องกับ Virtualenv
Sanket_Diwale

เมื่อคุณ sudo คุณเปลี่ยนไปใช้ $ PATH ของผู้ใช้รูทเพียงตรวจสอบให้แน่ใจว่า PATH ของเขาได้รับการอัปเดตไม่ใช่ PATH ของคุณ
Anthony Perot

คำตอบ:


53

ตรวจสอบ $ PATH ของคุณ

tox มีโหมดบรรทัดคำสั่ง:

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

มันอยู่ที่ไหน?

(แก้ไข: 2.7สิ่งที่ไม่สำคัญมากที่นี่ย่อยในใด ๆ3.xและ pip ​​ก็ทำงานในลักษณะเดียวกัน)

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 ? นั่นคือสิ่งที่ช่วยให้ค้นหาสิ่งที่ติดตั้ง pip ของฉันได้

ตอนนี้เพื่อดูว่าสิ่งที่มาจากงูหลามลองทำเช่นนี้ (แทนrosdepสำหรับtox)

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

ที่พิมพ์ออกมา:

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

ตอนนี้cdไปยังไดเร็กทอรีด้านบนlibในด้านบน คุณเห็นไดเร็กทอรีbinหรือไม่? คุณเห็น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

ขอบคุณ JL สำหรับคำตอบ แต่ส่วนใหญ่เป็นปัญหาของฉัน สำหรับแอปตัวอย่างของฉัน rosdep เมื่อฉันทำตามที่คุณทำนี่คือผลลัพธ์ที่ได้รับ: รายการ pip | 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 และตอนนี้มันใช้งานได้ ขอบคุณฉันประสบปัญหาในการค้นหาไบนารีซึ่งไม่ได้ให้ผลลัพธ์ใด ๆ
Sanket_Diwale

ส่งออก PATH = / opt / local / Library / Frameworks / Python.framework / Versions / 2.7 / bin: $ PATH หายไปในเส้นทางของฉันและทำเคล็ดลับสำหรับฉันบน OSX
Caio Iglesias

1
หากคุณไม่พบโปรแกรมที่มีwhich(หากยังไม่อยู่ในเส้นทางของคุณ) คุณสามารถลองค้นหาไบนารีโดยใช้mlocatelinux หรือmdfindบน macOS
jackcogdill

57

บน macOS ที่มีการติดตั้ง python เริ่มต้นคุณต้องเพิ่ม/Users/<you>/Library/Python/2.7/bin/ใน $ PATH ของคุณ

เพิ่มสิ่งนี้ใน. bash_profile ของคุณ:

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

นั่นคือจุดที่ pip ติดตั้งไฟล์ปฏิบัติการ

เคล็ดลับ: สำหรับเวอร์ชัน python ที่ไม่ใช่ค่าเริ่มต้นwhich pythonให้ค้นหาตำแหน่งของการติดตั้ง python ของคุณและแทนที่ส่วนนั้นในเส้นทางด้านบน (ขอบคุณสำหรับคำใบ้ Sanket_Diwale)


8
สถานที่ที่ติดตั้ง pip ขึ้นอยู่กับว่าคุณติดตั้ง python อย่างไร MacOS มีหลายวิธีในการติดตั้ง python เช่น macports, homebrew และ system default ขึ้นอยู่กับว่าคุณใช้ python เวอร์ชันใดคุณจะมีตำแหน่งที่แตกต่างกันสำหรับ pip วิธีง่ายๆในการค้นหาตำแหน่งของ pip และ python คือการใช้ "python ตัวไหน" ในเทอร์มินัลจากนั้นเพิ่มตำแหน่งที่เหมาะสมให้กับ $ PATH
Sanket_Diwale

1
สำหรับ macOS 10.14.3 การติดตั้ง Python 3.6 จาก python.org which python3ในที่สุดฉันก็ (ผ่านลิงค์) ไปที่/Library/Frameworks/Python.framework/Versions/3.6/bin/.
ต้นอินทผลัม

43

หากคุณกำลังติดตั้งโดยใช้--user(เช่นpip3.6 install --user tmuxp) ก็เป็นไปได้ที่จะได้รับใช้เฉพาะแพลตฟอร์มไดเรกทอรีที่ติดตั้งจากงูหลามตัวเองโดยใช้siteโมดูล ตัวอย่างเช่นบน macOS:

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

เมื่อผนวก/binเข้ากับสิ่งนี้ตอนนี้เรามีเส้นทางที่จะติดตั้งโปรแกรมปฏิบัติการของแพ็คเกจ เราสามารถเติม PATH แบบไดนามิกในไฟล์ rc ของเชลล์ของคุณตามเอาต์พุต ฉันใช้ทุบตี แต่ด้วยความโชคดีสิ่งนี้พกพาได้:

# 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"

ฉันใช้เวอร์ชัน Python ที่แม่นยำเพื่อลดโอกาสที่ไฟล์ปฏิบัติการจะ "หายไป" เมื่อ Python อัปเกรดเวอร์ชันรองเช่นจาก 3.5 เป็น 3.6 สิ่งเหล่านี้จะหายไปเนื่องจากดังที่เห็นด้านบนเส้นทางการติดตั้งของผู้ใช้อาจรวมถึงเวอร์ชัน Python ดังนั้นแม้ว่าpython3จะชี้ไปที่ 3.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"

29

ฉันรู้ว่าคำถามถามเกี่ยวกับ macOS แต่นี่คือวิธีแก้ปัญหาสำหรับLinuxผู้ใช้ที่มาถึงที่นี่ผ่าน Google

ฉันมีปัญหาที่อธิบายไว้ในคำถามนี้หลังจากติดตั้งpdfx แล้วแพ็คเกจผ่าน pip

เมื่อฉันวิ่งมันไม่มีอะไร ...

pip list | grep pdfx
pdfx (1.3.0)

ยัง:

which pdfx
pdfx not found

ปัญหาบน Linux คือการpip install ...วางสคริปต์ลงใน~/.local/binและสิ่งนี้ไม่ได้อยู่ใน Debian / Ubuntu เริ่มต้น$PATHDebian

นี่คือปัญหา 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

10

วิธีการแก้

ขึ้นอยู่กับคำตอบอื่น ๆ สำหรับlinuxและmacคุณสามารถเรียกใช้สิ่งต่อไปนี้:

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

แทนคุณpython3สามารถใช้ลิงก์อื่นไปยังเวอร์ชัน python: python` python2.7` python3.6,python3.9ฯลฯ

คำอธิบาย

เพื่อให้ทราบว่ามีการติดตั้งแพ็คเกจผู้ใช้ไว้ที่ใดในระบบปฏิบัติการปัจจุบัน (win, mac, linux) เราจึงเรียกใช้:

python3 -m site --user-base

เรารู้ว่าสคริปต์ไปที่ไฟล์ bin/โฟลเดอร์ที่ติดตั้งแพ็กเกจ

ดังนั้นเราจึงเชื่อมต่อเส้นทาง:

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

จากนั้นเราส่งออกไปยังตัวแปรสภาพแวดล้อม

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

สุดท้ายเพื่อหลีกเลี่ยงการทำซ้ำคำสั่งส่งออกเราจะเพิ่มมันลงใน.bashrcไฟล์ของเราและเราเรียกใช้sourceเพื่อเรียกใช้การเปลี่ยนแปลงใหม่โดยให้วิธีแก้ปัญหาที่แนะนำที่กล่าวถึงในตอนต้น


@Benjamints เพิ่มคำอธิบายหวังว่าจะช่วยให้โชคดี!
Willemoes

มีการอ้างถึงมากในคำสั่งสุดท้าย พยายามแก้ไข แต่ต้องเปลี่ยนตัวอักษรอย่างน้อย 6 ตัวจึงจะบันทึกได้
BenRoe

เสร็จแล้วฉันลบออกขอบคุณ
Willemoes

4

ฉันสะดุดกับคำถามนี้เพราะฉันสร้างสร้างและเผยแพร่แพ็คเกจ PyPI สำเร็จแล้ว แต่ไม่สามารถดำเนินการได้หลังการติดตั้ง $PATHตัวแปรถูกตั้งอย่างถูกต้อง

ในกรณีของฉันปัญหาคือฉันไม่ได้ตั้งค่าentry_pointในsetup.pyไฟล์:

entry_points = {'console_scripts':

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


2

นอกเหนือจากการเพิ่มbinไดเร็กทอรีของ python ไปยัง$PATHตัวแปรแล้วฉันยังต้องเปลี่ยนเจ้าของไดเร็กทอรีนั้นด้วยเพื่อให้มันใช้งานได้ ไม่รู้ว่าทำไมฉันถึงไม่ได้เป็นเจ้าของอยู่แล้ว

chown -R ~/Library/Python/

1

เมื่อคุณติดตั้ง Python หรือ Python3 โดยใช้ตัวติดตั้ง MacOS (ดาวน์โหลดจากเว็บไซต์ Python) - จะเพิ่มexporter ให้กับ~/.profileสคริปต์ของคุณ สิ่งที่คุณต้องทำมีเพียงแค่sourceนั้น การรีสตาร์ทเทอร์มินัลทั้งหมดควรทำตามเคล็ดลับด้วย

คำเตือน - ฉันเชื่อว่าการใช้ pip3 กับ Python3 จะดีกว่า - เพื่อประโยชน์ในอนาคต

หากคุณติดตั้ง Python3 ไว้แล้วขั้นตอนต่อไปนี้ใช้ได้ผลกับฉันบน macOS Mojave:

  1. ติดตั้ง ansible ครั้งแรกโดยใช้sudo-sudo -H pip3 install ansible

  2. คุณสร้าง symlink ไปยังbinเส้นทางของ Python

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


+1 สำหรับคำสั่งเปิดของคุณ (เพียงแค่เรียกใช้. profile ใหม่หรือออกจากระบบและกลับเข้ามาใหม่) หลังจากใช้ pip3 เพื่อติดตั้งแพ็คเกจ cmdline python
automorphic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.