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

时间:2016-03-09 17:38:44

标签: python macos pip macports

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

我使用macport安装了python2.7和pip 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中完美运行。

11 个答案:

答案 0 :(得分:30)

在使用默认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)

答案 1 :(得分:27)

检查$ PATH

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

在哪里?

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...

我的$ PATH中有什么?

rosdep

请注意 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin ?这是什么允许找到我的pip安装的东西

现在,要查看来自Python的内容,请尝试执行此操作(将tox替换为$python >>> import tox >>> tox.__file__ )。

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

打印出来:

lib

现在, cd 到上面rosdep正上方的目录。你看到 bin 目录了吗?你看到那个箱子里有bin吗?如果是这样,请尝试将audrey:2.7 jluc$ cd /opt/local/Library/Frameworks/Python.framework/Versions/2.7 audrey:2.7 jluc$ ls -1 添加到$ PATH。

Headers
Python
Resources
bin
include
lib
man
share

输出:

Picasso
.with(context)
.load(YOUR IMAGE PATH)
.resize(600, 200) // resizes the image to these dimensions (in pixel). does not respect aspect ratio
.into(imageView);

答案 2 :(得分:20)

如果您使用--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"

答案 3 :(得分:15)

解决方案

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

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

您可以使用任何其他指向python版本的链接来代替python3pythonpython2.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来运行新更改,从而为我们在开头提到了建议的解决方案。

答案 4 :(得分:2)

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

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

entry_points = {'console_scripts':

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

答案 5 :(得分:2)

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

答案 6 :(得分:1)

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

chown -R ~/Library/Python/

答案 7 :(得分:1)

我知道问题是关于macOS的,但是这是通过Google到达此处的 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"

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

答案 8 :(得分:1)

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

警告-我相信最好将pip3与Python3配合使用-以获得将来的收益。

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

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

    安装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

答案 9 :(得分:1)

来自微软商店的 Windows 和 Python 3.9

我有 python -m site --user-basepython -m site 的不同路径 - 是的,没有 --user-base 的第二个命令可以获取所有站点 - 正如此处的其他答案所述:

C:\Users\<your User>\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages

为什么我的路径不同

因为我从 MS Store 安装了 python

解决方案

将上面的路径放在你的路径中并用site-packages替换scripts

答案 10 :(得分:0)

在Windows上,这对我有帮助 https://packaging.python.org/tutorials/installing-packages

在Windows上,您可以通过运行python -m site --user-site并用脚本替换site-packages来找到用户基本二进制目录。例如,这可能返回C:\ Users \ Username \ AppData \ Roaming \ Python36 \ site-packages,因此您需要将PATH设置为包括C:\ Users \ Username \ AppData \ Roaming \ Python36 \ Scripts。您可以在控制面板中永久设置用户PATH。您可能需要注销才能使PATH更改生效。