我在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:命令未找到”
这不是特定于包的错误。对于在我的计算机上使用pip安装的任何包,我都会得到这个。我甚至试着加上
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
到我的$PATH。
但是在命令行中找不到可执行文件,即使包在python中完美地工作。
检查你的$PATH
Tox有一个命令行模式:
audrey:tests jluc$ pip list | grep tox
tox (2.3.1)
它在哪里?
(编辑:2.7的东西在这里不太重要,在任何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中的内容,请尝试这样做(用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目录了吗?你在箱子里看到罗斯戴普了吗?如果是这样,尝试将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
如果你使用——user进行安装(例如pip3.6 install——user tmuxp),可以使用site模块从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而不是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"
我知道这个问题问的是macOS,但这里有一个解决方案,适用于通过谷歌到达这里的Linux用户。
我遇到了这个问题中描述的问题,通过pip安装了pdfx包。
然而,当我运行它时,什么都没有……
pip list | grep pdfx
pdfx (1.3.0)
Yet:
which pdfx
pdfx not found
Linux上的问题是pip install…将脚本放入~/。这不是默认的Debian/Ubuntu $PATH。
这是一个GitHub问题,详细说明:https://github.com/pypa/pip/issues/3813
要修复,只需添加~/。例如,在你的.bashrc文件中添加以下一行:
export PATH="$HOME/.local/bin:$PATH"
在此之后,重新启动shell,事情应该会像预期的那样工作。
解决方案
根据其他答案,对于linux和mac,你可以运行以下命令:
echo "export PATH=\"`python3 -m site --user-base`/bin:\$PATH\"" >> ~/.bashrc
source ~/.bashrc
除了python3,你还可以使用任何其他python版本的链接:python、python2.7、python3.6、python3.9等。
不要选择.bashrc,而是从您喜欢的shell中选择rc文件。
解释
为了知道用户包在当前操作系统(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来运行新更改,给出开头提到的建议解决方案。
当你使用MacOS安装程序(从Python网站下载)安装Python或Python3时,它会在你的~/中添加一个导出器。配置脚本。你要做的就是找到它的来源。重新启动所有终端也可以达到目的。
警告——我认为最好在Python3中使用pip3 -为了将来的好处。
如果你已经安装了Python3,以下步骤在macOS Mojave上对我有效:
首先使用sudo - sudo - h pip3 Install ansible安装ansible
创建一个指向Python bin路径的符号链接
sudo ln -s /Library/Frameworks/Python.framework/Versions/Current/bin /Library/Frameworks/Python.framework/current_python_bin . sudo ln -s /Library/Frameworks/Python.framework/current_python_bin . txt
把它钉在。profile上
导出路径= $路径:/图书馆/框架/ Python.framework / current_python_bin
执行source ~/。配置并重新启动所有终端外壳。
键入ansible——version