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

San*_*ale 77 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脚本中导入它们.但是,找不到与可以从终端中的命令行调用的包关联的任何可执行文件.

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

例如,按照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
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*ard 56

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

我遇到了这个问题中描述的问题,通过 pip安装了pdfx包。

然而,当我运行它时,什么都没有......

pip list | grep pdfx
pdfx (1.3.0)
Run Code Online (Sandbox Code Playgroud)

然而:

which pdfx
pdfx not found
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

之后,重新启动您的 shell,一切都会按预期工作。

  • 您可以使用“source ~/.bashrc”来重新加载“.bashrc”配置,而不是重新启动 shell (4认同)

joh*_*mue 39

在具有默认python安装的macOS上,您需要添加/Users/<you>/Library/Python/2.7/bin/到$ PATH.

将其添加到.bash_profile:

export PATH="/Users/<you>/Library/Python/2.7/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

这就是pip安装可执行文件的地方.

提示:对于非默认的python版本which python,找到python安装的位置并替换上面路径中的那个部分.(感谢提示Sanket_Diwale)

  • pip安装的地方取决于你如何安装python,MacOS有多种安装python的方法,比如macports,homebrew和system default.根据正在使用的python版本,您将拥有不同的pip位置.找出pip和python所在位置的一种简单方法是在终端中使用"which python",然后将适当的位置添加到$ PATH. (6认同)

JL *_*ret 35

检查你的$ PATH

tox 有一个命令行模式:

audrey:tests jluc$ pip list | grep tox
tox (2.3.1)
Run Code Online (Sandbox Code Playgroud)

它在哪里?

audrey:tests jluc$ which tox
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/tox
Run Code Online (Sandbox Code Playgroud)

我的$ 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...
Run Code Online (Sandbox Code Playgroud)

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

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

$python
>>> import tox
>>> tox.__file__
Run Code Online (Sandbox Code Playgroud)

打印出来:

'/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/tox/__init__.pyc'
Run Code Online (Sandbox Code Playgroud)

现在,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
Run Code Online (Sandbox Code Playgroud)

输出:

Headers
Python
Resources
bin
include
lib
man
share
Run Code Online (Sandbox Code Playgroud)

  • 是的,我很抱歉,但这完全是……奇怪的(?)……建议使用“which”,因为只有在实际上可以找到二进制文件的情况下,它才会给出正确的答案。OP 的问题(以及大多数来这里的人)不是这种情况。 (3认同)
  • 如果您无法使用“which”找到该程序(如果它不在您的路径中),您还可以尝试在 Linux 上使用“mlocate”或在 macOS 上使用“mdfind”来查找二进制文件。 (2认同)

Wil*_*oes 35

解决方案

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

echo "export PATH=\"`python3 -m site --user-base`/bin:\$PATH\"" >> ~/.bashrc
source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

而不是python3你可以使用任何其他链接到Python版本:pythonpython2.7python3.6python3.9,等。

从您喜欢的 shell 中选择 rc 文件,而不是 .bashrc。

解释

为了知道用户包在当前操作系统(win、mac、linux)中的安装位置,我们运行:

python3 -m site --user-base
Run Code Online (Sandbox Code Playgroud)

我们知道脚本会转到bin/安装包的文件夹。

所以我们连接路径:

echo `python3 -m site --user-base`/bin
Run Code Online (Sandbox Code Playgroud)

然后我们将其导出到环境变量。

export PATH=\"`python3 -m site --user-base`/bin:$PATH\"
Run Code Online (Sandbox Code Playgroud)

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


Ale*_*mer 33

如果您正在使用--user(例如pip3.6 install --user tmuxp)进行安装,则可以使用该site模块从Python本身获取特定于平台的用户安装目录.例如,在macOS上:

$ python2.7 -m site --user-base
/Users/alexp/Library/Python/2.7
Run Code Online (Sandbox Code Playgroud)

通过附加/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"
Run Code Online (Sandbox Code Playgroud)

我使用精确的Python版本来减少Python升级次要版本时可执行文件"消失"的可能性,例如从3.5升到3.6.它们将消失,因为如上所述,用户安装路径可能包含Python版本.因此虽然python3可以指向3.5或3.6,但python3.6总是指向3.6.这需要进一步安装包时要牢记,如使用pip3.6pip3.

如果你不介意包的消失,你可以使用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"
Run Code Online (Sandbox Code Playgroud)


小智 27

python.org 上的安装包教程描述了如何找到二进制目录:

\n

在 Windows 上

\n
\n

python -m site --user-site您可以通过运行\n并替换site-packages为 来查找用户基础二进制目录Scripts。\n例如,这可能会返回\n C:\\Users\\Username\\AppData\\Roaming\\Python36\\site-packages,因此您\n需要将 PATH 设置为 include\n C:\\Users\\Username\\AppData\\Roaming\\Python36\\Scripts

\n
\n

在 Linux 和 macOS 上

\n
\n

在 Linux 和 macOS 上,您可以通过运行python -m site --user-base并添加bin到末尾来找到用户基础二进制目录。例如,这通常会打印~/.local~扩展为主目录的绝对路径),因此您需要将 xe2x80x99 添加~/.local/bin到您的 PATH 中。

\n
\n


Tim*_*imo 7

MS Store 中的 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

为什么我的路不一样

因为我是python从MS Store安装的

解决方案

将上面的路径放入你的路径中并替换site-packagesscripts


Jar*_*ach 6

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


小智 6

我解决问题!

  1. 改用.pip3pip
  2. pip3 install foobaz
  3. vim ~/.zshrc并添加:
export PATH="/Users/your_name/Library/Python/3.8/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)
  1. source ~/.zshrc

现在,MacOS 已将默认终端从bash改为zsh。因此,您必须获取 zshrc,而不是 bashrc 或 bash_profile。

  1. foobaz -v


Tho*_*yer 5

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

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

entry_points = {'console_scripts':

['YOUR_CONSOLE_COMMAND=MODULE_NAME.FILE_NAME:FUNCTION_NAME'],},
Run Code Online (Sandbox Code Playgroud)