我正在使用 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
给我的$PATH
。但是在命令行上找不到可执行文件,即使这些包在 python 中完美运行。
我知道这个问题是关于 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,一切都应该按预期工作。
在具有默认 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 的提示)
which python3
最终(通过链接)将我引导至 /Library/Frameworks/Python.framework/Versions/3.6/bin/
。
/opt/homebrew/bin/
下找到了 pip3 安装的二进制文件。我花了一段时间,因为我试图在 /opt/homebrew/lib/python3.9/
下找到它,但只找到了站点包。
检查你的 $PATH
tox
具有命令行模式:
audrey:tests jluc$ pip list | grep tox
tox (2.3.1)
它在哪里?
(编辑:2.7
的东西在这里无关紧要,任何 3.x
中的 sub 和 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?这就是允许找到我的 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
rosdep
与您的问题一致。我的意思是您需要找到 rosdep
的安装位置以及 $PATH 的样子。
which
的程序(如果它不在您的路径中),您也可以尝试在 linux 上使用 mlocate
或在 macOS 上使用 mdfind
来查找二进制文件。
解决方案
根据其他答案,对于 linux
和 mac
,您可以运行以下命令:
echo "export PATH=\"`python3 -m site --user-base`/bin:\$PATH\"" >> ~/.bashrc
source ~/.bashrc
您可以使用任何其他指向 python 版本的链接来代替 python3
:python
、python2.7
、python3.6
、python3.9
等。
从您最喜欢的 shell 中选择 rc 文件,而不是 .bashrc。
解释
为了知道用户包在当前操作系统(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\"
最后,为了避免重复导出命令,我们将其添加到 .bashrc
文件并运行 source
以运行新更改,从而为我们提供了开头提到的建议解决方案。
$PATH
,回显将扩展完整的 PATH!将完整的 PATH 放在 bashrc 中并不常见...您需要转义 $
符号!
如果您使用 --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
。
如果您不介意包消失的想法,您可以使用 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"
我偶然发现了这个问题,因为我创建、成功构建并发布了一个 PyPI 包,但在安装后无法执行它。 $PATH
变量已正确设置。
就我而言,问题是我没有在 setup.py
文件中设置 entry_point
:
entry_points = {'console_scripts':
['YOUR_CONSOLE_COMMAND=MODULE_NAME.FILE_NAME:FUNCTION_NAME'],},
在 Windows 上,您需要将路径 %USERPROFILE%\AppData\Roaming\Python\Scripts
添加到您的路径。
在 Windows 上,这对我有帮助https://packaging.python.org/tutorials/installing-packages
在 Windows 上,您可以通过运行 python -m site --user-site 并用脚本替换站点包来找到用户基础二进制目录。例如,这可能返回 C:\Users\Username\AppData\Roaming\Python36\site-packages,因此您需要将 PATH 设置为包含 C:\Users\Username\AppData\Roaming\Python36\Scripts。您可以在控制面板中永久设置您的用户路径。您可能需要注销才能使 PATH 更改生效。
来自 MS Store 的 Windows 和 Python 3.9
我有 python -m site --user-base
和 python -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
当您使用 MacOS 安装程序(从 Python 网站下载)安装 Python 或 Python3 时,它会在您的 ~/.profile
脚本中添加一个 export
er。您需要做的只是 source
它。重新启动所有终端也应该可以解决问题。
警告 - 我相信最好将 pip3 与 Python3 一起使用 - 以获得未来的利益。
如果您已经安装了 Python3,以下步骤适用于 macOS Mojave:
首先使用 sudo 安装 ansible - sudo -H pip3 install ansible 你创建一个指向 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
运行 source ~/.profile 并重新启动所有终端 shell。键入 ansible --version
除了将 python 的 bin
目录添加到 $PATH
变量之外,我还必须更改该目录的所有者,以使其正常工作。不知道为什么我已经不是所有者了。
chown -R ~/Library/Python/
macOS Monterey 也有同样的问题。我必须修改我的 .bash_profile
文件并添加以下条目
export PATH="~/Library/Python/3.8/bin:$PATH"
macOS Monterey 上的默认 Python 版本是 3.8,但您必须仔细检查您的 Python 版本以确保您使用的是正确的版本
我解决问题!
使用 pip3 代替 pip。 pip3 install foobaz vim ~/.zshrc 并添加:
export PATH="/Users/your_name/Library/Python/3.8/bin:$PATH"
源〜/ .zshrc
现在 MacOS 已将默认终端从 bash 转移到 zsh。因此,您必须 source zshrc 而不是 bashrc 或 bash_profile。
foobaz -v
不定期副业成功案例分享
source ~/.bashrc
重新加载.bashrc
配置,而不是重新启动 shell/home/USER/.local/bin
中。顺便说一句:它之前安装在那里,我只是尝试在升级之前手动更新和删除它。