我正在使用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中完美运行。
检查你的$ PATH
tox
有一个命令行模式:
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
我的$ 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
在使用默认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)
如果您使用--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
variable被正确设置。
在我的情况下,问题是我没有在entry_point
文件中设置setup.py
in:
entry_points = {'console_scripts':
['YOUR_CONSOLE_COMMAND=MODULE_NAME.FILE_NAME:FUNCTION_NAME'],},
在Windows上,您需要将路径%USERPROFILE%\AppData\Roaming\Python\Scripts
添加到路径中。
除了将python的bin
目录添加到$PATH
变量之外,我还必须更改该目录的所有者,以使其工作。不知道我为什么不是主人。
chown -R ~/Library/Python/