Подтвердить что ты не робот

Pip успешно устанавливает пакеты, но исполняемые файлы не найдены из командной строки

Я работаю над 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.

4b9b3361

Ответ 1

проверьте свой $PATH

tox имеет режим командной строки:

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

где это?

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? Это то, что позволяет найти мои вещи, установленные в пике

Теперь, чтобы увидеть, где вещи находятся на 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 в приведенном выше. Вы видите каталог 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

Ответ 2

В 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)

Ответ 3

Если вы устанавливаете с использованием --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"

Ответ 4

Я наткнулся на этот вопрос, потому что я создал, успешно создал и опубликовал пакет PyPI, но не смог выполнить его после установки. Переменная $PATH была правильно установлена.

В моем случае проблема заключалась в том, что я не установил entry_point в файле setup.py:

entry_points = {'console_scripts':

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

Ответ 5

В Windows вам нужно добавить путь %USERPROFILE%\AppData\Roaming\Python\Scripts к вашему пути.

Ответ 6

В дополнение к добавлению каталога bin python в переменную $PATH, мне также пришлось изменить владельца этого каталога, чтобы он работал. Понятия не имею, почему я уже не владелец.

chown -R ~/Library/Python/