pip成功安装包,但是从命令行找不到可执行文件

问题描述 投票:58回答:5

我正在使用Mac OS X Yosemite,版本10.10.3。

我在http://johnlaudun.org/20150512-installing-and-setting-pip-with-macports/中使用macport安装了python2.7和pip

我可以成功安装包并在我的python环境和python脚本中导入它们。但是,找不到与可以从终端中的命令行调用的包关联的任何可执行文件。

有谁知道什么可能是错的? (更多细节如下)

例如,按照http://wiki.ros.org/jade/Installation/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"

这不是特定于包的错误。我在计算机上使用pip安装的任何软件包都能得到这个。我甚至尝试过添加

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

到我的$PATH。但是在命令行中找不到可执行文件,即使这些包在python中完美运行。

python macos pip macports
5个回答
30
投票

检查你的$ 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?这是允许找到我的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正上方的目录。你看到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

35
投票

在使用默认python安装的macOS上,您需要将/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)


26
投票

如果您使用--user(例如pip3.6 install --user tmuxp),it is possible to get the platform-specific user install directory from Python itself using the site module进行安装。例如,在macOS上:

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

通过将/bin附加到此,我们现在有了安装包可执行文件的路径。我们可以根据输出动态填充shell的rc文件中的PATH;我正在使用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

如果你不介意包的消失,你可以使用python2python3代替:

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

2
投票

我偶然发现了这个问题,因为我创建,成功构建并发布了一个PyPI包,但是在安装后无法执行它。 $PATHvariable被正确设置。

在我的情况下,问题是我没有在entry_point文件中设置setup.pyin:

entry_points = {'console_scripts':

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

2
投票

在Windows上,您需要将路径%USERPROFILE%\AppData\Roaming\Python\Scripts添加到路径中。


0
投票

除了将python的bin目录添加到$PATH变量之外,我还必须更改该目录的所有者,以使其工作。不知道我为什么不是主人。

chown -R ~/Library/Python/
© www.soinside.com 2019 - 2024. All rights reserved.