Answers:
您需要将新目录添加到环境变量中PYTHONPATH
,并用冒号与其之前的内容分隔开。在任何形式的Unix中,您都可以在启动脚本中执行此操作,该脚本适合于您正在使用的任何shell(.profile
或取决于您喜欢的shell),该命令又取决于所讨论的shell。在Windows中,您可以为此目的通过系统GUI进行操作。
superuser.com
可能是一个更好的地方,例如,如果您需要有关如何在所选平台和外壳程序中丰富环境变量的详细信息,请提供更多详细信息,因为这本身并不是真正的编程问题。
如果您正在使用bash(在Mac或GNU / Linux发行版上),请将其添加到您的 ~/.bashrc
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
sudo su
.bashrc文件的开头是个坏主意。这篇文章与我同意。至少在我的系统上,这甚至没有必要。
除了操作之外,PYTHONPATH
您还可以创建路径配置文件。首先找出Python在哪个目录中搜索此信息:
python -m site --user-site
由于某些原因,这似乎在Python 2.7中不起作用。在那里您可以使用:
python -c 'import site; site._script()' --user-site
然后.pth
在该目录中创建一个文件,其中包含您要添加的路径(如果目录不存在,则创建该目录)。
例如:
# find directory
SITEDIR=$(python -m site --user-site)
# create if it doesn't exist
mkdir -p "$SITEDIR"
# create new .pth file with our path
echo "$HOME/foo/bar" > "$SITEDIR/somelib.pth"
python -m site --user-site
和(create the directory if it doesn't exist)
部分来使它正常工作。
somelib.pth
?如果没有,有任何猜测为什么这可能行不通?
这适用于Windows
然后,您将能够从脚本中查看这些路径内的所有模块。
如果仍然有人困惑-如果您使用的是Mac,请执行以下操作:
open .bash_profile
export PYTHONPATH=$PYTHONPATH:foo/bar
export
关键是我所缺少的东西!!!!
您可以通过pythonrc文件添加路径,该文件在Linux上默认为〜/ .pythonrc。即。
import sys
sys.path.append('/path/to/dir')
您也可以PYTHONPATH
在全局rc文件中(例如~/.profile
在Mac或Linux上)或通过Windows上的“控制面板”->“系统”->“高级”选项卡->“环境变量”来设置环境变量。
为了提供更多说明,Python将使用脚本(通常位于sys.prefix + 和中)自动构建其搜索路径(如上所述和此处)。一个可以获得sys.prefix的值:site.py
lib/python<version>/site-packages
lib/site-python
python -c 'import sys; print(sys.prefix)'
然后,site.py脚本将取决于平台的许多目录(例如/usr/{lib,share}/python<version>/dist-packages
)添加/usr/local/lib/python<version>/dist-packages
到搜索路径,并且还在这些路径中<package>.pth
搜索包含特定其他搜索路径的配置文件。例如,easy-install维护其已安装软件包的集合,这些软件包已添加到系统特定文件中,例如在Ubuntu上/usr/local/lib/python2.7/dist-packages/easy-install.pth
。在典型的系统上,有很多这些.pth文件,它们可以解释sys.path中一些意外的路径:
python -c 'import sys; print(sys.path)'
因此,可以创建一个.pth文件并将其放置在任何这些目录中(包括如上所述的sitedir )。这似乎是大多数软件包被添加到sys.path的方式,而不是使用PYTHONPATH。
注意:在OSX上,site.py为'framework builds'添加了一个特殊的附加搜索路径(但似乎适用于python的常规命令行使用):(/Library/Python/<version>/site-packages
例如,对于Python2.7:)/Library/Python/2.7/site-packages/
,这是应该使用第三方软件包的地方要安装(请参阅该目录中的自述文件)。因此,可以在其中添加包含其他搜索路径的路径配置文件,例如创建一个名为的文件/Library/Python/2.7/site-packages/pip-usr-local.pth
,其中包含/usr/local/lib/python2.7/site-packages/
,然后系统python将添加该搜索路径。
对我来说,当我更改.bash_profile
文件时它起作用了。只是更改.bashrc
文件才有效,直到我重新启动外壳程序为止。
对于python 2.7,它应如下所示:
export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
在.bash_profile
文件末尾。
export PYTHONPATH="${PYTHONPATH}:/my/other/path"
如果PYTHONPATH
当前不存在,则添加到〜/ .bashrc可能不起作用(因为:
)。
export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"
将以上内容添加到我的〜/ .bashrc中可以在Ubuntu 16.04上为我实现窍门
echo PYTHONPATH
,什么都没出现!这意味着此PYTHONPATH尚未启动,因此我仅将此行粘贴export PYTHONPATH=$PYTHONPATH:<PATH_TO_TF>/TensorFlow/models/research/object_detection
到我的~/.bashrc
文件中即可source ~/.bashrc
。后来,当我执行echo $ PYTHONPATH时,它给了我:<PATH_TO_TF>/TensorFlow/models/research/object_detection
,如果我做错了什么建议?
export PYTHONPATH=<PATH_TO_TF>/TensorFlow/models/research/object_detection
,当您首次导出PYTHONPATH时,您必须没有该${PYTHONPATH}:
部分而做
:<PATH_TO_TF>/TensorFlow/models/research/object_detection
第二个export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim
。有什么建议,如何解决?
只是对awesomo的答案添加,也可以添加该行到您~/.bash_profile
或~/.profile
.bash_profile
如果使用登录外壳,则添加到该文件,否则使用.profile
以下脚本是纯Python,因此可在所有平台上使用。它利用了https://docs.python.org/3/library/pathlib.html此处记录的pathlib路径,以使其跨平台工作。您只需运行一次,然后重新启动内核即可。受https://medium.com/@arnaud.bertrand/modifying-python-s-search-path-with-pth-files-2a41a4143574的启发。
from pathlib import Path
to_add=Path(path_of_directory_to_add)
from sys import path
if str(to_add) not in path:
minLen=999999
for index,directory in enumerate(path):
if 'site-packages' in directory and len(directory)<=minLen:
minLen=len(directory)
stpi=index
pathSitePckgs=Path(path[stpi])
with open(str(pathSitePckgs/'current_machine_paths.pth'),'w') as pth_file:
pth_file.write(str(to_add))
这是对此线程的更新,具有一些旧的答案。
对于使用MAC-OS Catalina或更高版本(> = 10.15)的用户,它引入了一个新的终端,名为zsh
(替代旧的bash
)。
由于此更改,上述答案有些问题,我通过创建文件~/.zshrc
并将文件目录粘贴到$PATH
和进行了一些变通方法$PYTHONPATH
所以,首先我做了:
nano ~/.zshrc
当编辑器打开时,我粘贴了以下内容:
export PATH="${PATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
export PYTHONPATH="${PYTHONPATH}:/Users/caio.hc.oliveira/Library/Python/3.7/bin"
保存它,然后重新启动终端。
重要提示:上面的路径设置为我计算机的路径,您必须将其调整为适合您的python。
在Python 3.6.4中,您可以像这样在python会话之间持久化sys.path:
import sys
import os
print(str(sys.path))
dir_path = os.path.dirname(os.path.realpath(__file__))
print(f"current working dir: {dir_path}")
root_dir = dir_path.replace("/util", '', 1)
print(f"root dir: {root_dir}")
sys.path.insert(0, root_dir)
print(str(sys.path))
我强烈建议您使用virtualenv和virtualenvwrapper,否则您的路径将会混乱