pip успішно встановлює пакети, але виконувані файли не знайдено в командному рядку


110

Я працюю над 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.


будь-який віртуаленв?
JL Peyret

ні, ніяких віртуалів не бере участь.
Sanket_Diwale

коли ви судо, ви переходите на $ PATH кореневого користувача, просто переконайтеся, що його PATH оновлено, а не ваш PATH
Ентоні Перот

Відповіді:


48

перевірити свій $ PATH

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 ? Ось що дозволяє знайти мої файли, встановлені на Pip

Тепер, щоб побачити , де речі з Python, спробуйте робити це (замінник 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вгорі. Ви бачите каталог бін ? Ти бачиш 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 list | 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 / Бібліотека / Рамки / Python.framework / Версії / 2.7 / бін: $ PATH відсутній на моїх шляхах і зробив трюк для мене на OSX
Caio Iglesias

1
Якщо ви не можете знайти програму за допомогою which(якщо вона ще не на вашому шляху), ви також можете спробувати знайти двійковий файл за допомогою mlocateLinux або mdfindmacOS.
jackcogdill

54

У 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

Для встановлення MacOS 10.14.3, встановлення Python 3.6 з python.org, which python3привело мене врешті (через посилання) на /Library/Frameworks/Python.framework/Versions/3.6/bin/.
фенікс

42

Якщо ви встановлюєте за допомогою --user(напр. pip3.6 install --user tmuxp), Можна отримати конкретний користувальницький каталог встановлення платформи з самого Python за допомогою siteмодуля . Наприклад, на macOS:

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

Додавши /binдо цього, тепер у нас є шлях, куди будуть встановлені виконувані файли пакунків. Ми можемо динамічно заповнити PATH у файлі rc вашої оболонки на основі виводу; Я використовую bash, але при будь-якій удачі це портативний:

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

21

Я знаю, що питання задається про 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 за замовчуванням $PATH.

Ось випуск GitHub детальніше: https://github.com/pypa/pip/isissue/3813

Щоб виправити, просто додайте ~/.local/binдо свого $PATH, наприклад, додавши у .bashrcфайл наступний рядок :

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

Після цього перезавантажте оболонку, і все має працювати так, як очікувалося.


2
Замість перезавантаження вашої оболонки ви можете source ~/.bashrcперезавантажити .bashrcконфігурацію
Whiteclaws

1
Чудово. Я отримував "токсичну команду не знайдено". Після оновлення PATH це працює
GabrielBB

4

Рішення

На основі інших відповідей, для linuxі macви можете запустити наступне:

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

замість того , python3ви можете використовувати будь-яку іншу посилання на пітон версію: 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 додав пояснення, сподіваюся, що це допоможе, удачі!
Віллемос

дуже тобі дякую! :)
Бенджамінц


2

Я натрапив на це питання, тому що створив, успішно створив і опублікував пакет PyPI, але не зміг його виконати після встановлення. The$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/

0

Коли ви встановлюєте Python або Python3 за допомогою інсталятора MacOS (завантажений з веб-сайту Python) - це додає exporter до вашого ~/.profileсценарію. Все, що вам потрібно зробити, це простоsource це. Перезапуск всіх терміналів також повинен зробити свою справу.

ПОПЕРЕДЖЕННЯ - Я вважаю, що краще використовувати pip3 разом із Python3 - для майбутніх переваг.

Якщо у вас вже встановлений Python3, наступні кроки для мене працюють на macOS Mojave:

  1. Встановіть ansible спочатку за допомогою sudo-sudo -H pip3 install ansible

  2. ви створюєте символьне посилання на 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.