pip成功安装软件包,但在命令行中找不到可执行文件


109

我正在使用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内正常运行,也无法在命令行上找到可执行文件。


是否涉及任何virtualenv?
JL Peyret

不,不涉及virtualenv。
Sanket_Diwale '16

当您使用sudo时,您切换到root用户的$ PATH,只需确保更新了他的PATH,而不是您的PATH
Anthony Perot

Answers:


48

检查您的$ PATH

tox 具有命令行模式:

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

它在哪里?

(编辑:这里的2.7东西没什么大不了的,无论是sub 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吗?这就是找到我点子安装的东西的原因

现在,看到那里的东西都是从Python中,尝试这样做(替代rosdeptox)。

$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 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 '16

导出PATH = / opt / local / Library / Frameworks / Python.framework / Versions / 2.7 / bin:$ PATH在我的路径上丢失了,并且在OSX上帮了我大忙
Cai Iglesias

1
如果找不到程序which(如果它不在您的路径中),您也可以尝试mlocate在Linux或mdfindmacOS上使用二进制文件。
jackcogdill

54

在具有默认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)


8
pip的安装位置取决于安装python的方式,MacOS具有多种安装python的方式,例如macports,自制软件和系统默认设置。根据所使用的python版本,您将在不同的位置获得pip。确定pip和python位置的一种简单方法是在终端中使用“哪个python”,然后将适当的位置添加到$ PATH中。
Sanket_Diwale '17

对于macOS 10.14.3,从python.org安装Python 3.6 which python3最终使我(通过链接)转到/Library/Frameworks/Python.framework/Versions/3.6/bin/
凤凰城

42

如果您使用--user(例如pip3.6 install --user tmuxp)进行安装,则可以使用sitemodule 从Python本身获取特定于平台的用户安装目录。例如,在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在over上使用时,请记住这一点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"

21

我知道问题是关于macOS的,但是这是通过Google到达Linux的Linux用户的解决方案。

我已经通过pip 安装了pdfx软件包,因此遇到了这个问题中描述的问题。

但是,当我运行它时,什么都没有...

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/issues/3813

要解决此问题,只需将添加~/.local/bin$PATH,例如,将以下行添加到.bashrc文件中:

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

在那之后,重新启动您的外壳,一切应该按预期进行。


2
您可以source ~/.bashrc重新加载.bashrc配置,而不是重新启动外壳
Whiteclaws

1
大。我收到“找不到Tox命令”。更新PATH后,它可以工作
GabrielBB

4

基于其他的答案,对linuxmac您可以运行以下命令:

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

而不是python3你可以使用任何其他链接到Python版本:pythonpython2.7python3.6python3.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\""

最后,为了避免重复执行export命令,我们将其添加到.bashrc文件中,然后运行source以运行新更改,从而为我们提供了开头提到的建议解决方案。


这对我
Benjamints

@Benjamints添加了解释,希望对您有所帮助,祝您好运!
Willemoes

非常感谢你!:)
Benjamints

3

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


2

我偶然发现了这个问题,因为我创建,成功构建并发布了一个PyPI软件包,但安装后无法执行。该$PATH变量被设置正确。

就我而言,问题是我没有entry_pointsetup.py文件中设置:

entry_points = {'console_scripts':

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

2

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

chown -R ~/Library/Python/

0

当您使用MacOS安装程序(可从Python网站下载)安装Python或Python3时,它将export~/.profile脚本中添加er 。您只需要做source。重新启动所有终端也可以解决问题。

警告-我认为最好将pip3与Python3配合使用-以获取未来的收益。

如果您已经安装了Python3,则以下步骤可在macOS Mojave上为我工作:

  1. 首先使用sudo- 安装ansiblesudo -H pip3 install ansible

  2. 您创建到Python 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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.