永久添加目录到PYTHONPATH?

每当我使用sys.path.append时,新目录将被添加。然而,一旦我关闭python,列表将恢复到以前的(默认?)值。我如何永久地添加一个目录PYTHONPATH?

989637 次浏览

如果你正在使用bash(在Mac或GNU/Linux发行版上),请将此添加到~/.bashrc

export PYTHONPATH="${PYTHONPATH}:/my/other/path"

你需要将你的新目录添加到环境变量PYTHONPATH中,用冒号与之前的内容分开。在任何形式的Unix中,你都可以在适合于你所使用的任何shell (.profile或其他,取决于你喜欢的shell)的启动脚本中使用命令来完成这一点,同样,这取决于所讨论的shell;在Windows中,您可以通过系统GUI来实现此目的。

superuser.com可能是一个更好的进一步询问的地方,即如果你需要详细说明如何在你所选择的平台和shell中丰富一个环境变量,因为它本身并不是一个真正的编程问题。

您可以通过pythonrc文件添加路径,该文件默认为~/。linux上的Pythonrc。ie。

import sys
sys.path.append('/path/to/dir')

你也可以在一个全局rc文件中设置PYTHONPATH环境变量,比如mac或linux上的~/.profile,或者在windows上通过控制面板->系统->高级选项卡->环境变量。

为了添加awesomo的答案,你也可以将这一行添加到你的~/.bash_profile~/.profile

除了操纵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"

如果有人仍然感到困惑,如果你在Mac上,请执行以下操作:

  1. 打开终端
  2. 类型open .bash_profile
  3. 在弹出的文本文件中,在最后添加这行: 李export PYTHONPATH=$PYTHONPATH:foo/bar < / >
  4. 保存文件,重新启动终端,就完成了

在linux上,您可以创建从包到PYTHONPATH目录的符号链接,而不必处理环境变量。喜欢的东西:

ln -s /your/path /usr/lib/pymodules/python2.7/

对我来说,当我改变.bash_profile文件时,它工作了。只是改变.bashrc文件工作,直到我重新启动shell。

对于python 2.7,它应该是这样的:

export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"

.bash_profile文件的末尾。

这适用于Windows

  1. 在Windows上,使用Python 2.7进入Python安装文件夹。
  2. 开放的Lib /网站。
  3. 将example.pth空文件添加到此文件夹。
  4. 将所需的路径添加到文件中,每行一个。

然后,您将能够从脚本中看到这些路径中的所有模块。

为了更详细地解释,Python将使用site.py脚本自动构造它的搜索路径(如前面提到的以上在这里)(通常位于sys。前缀+ lib/python<version>/site-packages以及lib/site-python)。可以获取sys.prefix的值:

python -c 'import sys; print(sys.prefix)'

py脚本然后根据平台添加一些目录,例如/usr/{lib,share}/python<version>/dist-packages/usr/local/lib/python<version>/dist-packages到搜索路径会在这些路径中搜索包含特定额外搜索路径的<package>.pth配置文件。例如,容易的安装维护其已安装包的集合,这些包被添加到系统特定的文件中,例如在Ubuntu中,它是/usr/local/lib/python2.7/dist-packages/easy-install.pth。在一个典型的系统中,有一堆这样的.pth文件,它们可以解释sys.path中的一些意外路径:

python -c 'import sys; print(sys.path)'

所以你可以创建一个.pth文件,并把它放在这些目录中的任何一个(包括前面提到的以上的sitedir)。这似乎是大多数包被添加到系统的方式。而不是使用PYTHONPATH。

注意:在OSX上,site.py为“框架构建”添加了一个特殊的额外搜索路径(但似乎适用于python的正常命令行使用):/Library/Python/<version>/site-packages(例如,对于Python2.7: /Library/Python/2.7/site-packages/),这是第三方包应该安装的地方(参见该目录中的README)。因此,你可以在那里添加一个路径配置文件,其中包含额外的搜索路径,例如创建一个名为/Library/Python/2.7/site-packages/pip-usr-local.pth的文件,其中包含/usr/local/lib/python2.7/site-packages/,然后系统python将添加该搜索路径。

我在Windows Vista中永久添加了Python 3.5

系统>控制面板>系统高级设置>高级(点击)环境变量>系统变量>(如果在变量列中没有看到PYTHONPATH)(点击)新建>变量名称:PYTHONPATH >变量值:

请将目录写在变量值中。这是Blue Peppers回答的细节。

export PYTHONPATH="${PYTHONPATH}:/my/other/path"添加到~/。如果PYTHONPATH当前不存在(因为:), bashrc可能无法工作。

export PYTHONPATH="/my/other/path1"
export PYTHONPATH="${PYTHONPATH}:/my/other/path2"

将以上内容添加到我的~/。bashrc在Ubuntu 16.04上为我完成了这个任务

在Python 3.6.4中,可以持久化sys。通过python会话的路径如下所示:

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,否则你会弄乱你的路径

下面的脚本可以在所有平台上运行,因为它是纯Python。它使用pathlib路径,这里记录https://docs.python.org/3/library/pathlib.html,使其跨平台工作。运行一次,重新启动内核,就完成了。灵感来自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))

向PYTHONPATH添加新路径是手动执行的:

将路径添加到~/。Bashrc剖面,在终端由:

vim ~/.bashrc

将以下内容粘贴到您的配置文件中

export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"

然后,当你在终端中运行你的代码时,确保你的bashrc配置文件的来源:

source ~/.bashrc

希望这能有所帮助。

在MacOS上,而不是给出特定库的路径。给出根项目文件夹的完整路径

~/.bash_profile

让我很开心,例如:

export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"

这样做之后:

source ~/.bash_profile

A <->之间的最短路径B是一条直线;

import sys
if not 'NEW_PATH' in sys.path:
sys.path += ['NEW_PATH']

这是对这个线程的更新,它有一些旧的答案。

对于那些使用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。

修复从bash切换到zsh时Python路径问题

当我从bash切换到zsh时,我遇到了Python路径问题。

解决办法很简单,但我没有注意到。

Pip告诉我,脚本 blah blah blah blah安装在~/.local/bin中,即不在路上

在阅读了这个问题的一些解决方案后,我打开我的.zshrc,发现解决方案已经存在。

我不得不取消注释一行:

看一看

截图from 2020-10-07 13-38-17

受到andrei-deusteanu答案的启发,以下是我的版本。这允许您在site-packages目录中创建许多额外的路径。

import os


# Add paths here.  Then Run this block of code once and restart kernel. Paths should now be set.
paths_of_directories_to_add = [r'C:\GIT\project1', r'C:\GIT\project2', r'C:\GIT\project3']


# Find your site-packages directory
pathSitePckgs = os.path.join(os.path.dirname(os.__file__), 'site-packages')


# Write a .pth file in your site-packages directory
pthFile = os.path.join(pathSitePckgs,'current_machine_paths.pth')
with open(pthFile,'w') as pth_file:
pth_file.write('\n'.join(paths_of_directories_to_add))


print(pthFile)

我找到了一个解决方案,在蟒蛇环境中这样做:https://datacomy.com/python/anaconda/add_folder_to_path/

只是:

conda develop /your_path

在多次撞击墙壁后。最终解决,在我的CentOS 8pip3是旧的,显示错误安装最近的包。

现在,我已经下载了Python源包,它是Python-3.10.4,并以通常的方式安装,但是安装后检查在bash中产生了错误。

我不能删除现有的Python,因为这会破坏CentOS桌面特性。

解决方案:

为构建

  1. ./configure //不添加--prefix=/usr,你需要适当地设置

  2. < p > make -j8

  3. < p > sudo make install

现在,由于你安装了多个Python,你可以设置alias python=python3

和用于设置PYTHONPATH

export PYTHONPATH="/usr/local/bin/python3.10:/usr/local/lib/python3.10/lib-dynload:/usr/local/lib/python3.10/site-packages"

不要添加PYTHONHOME

对于那些(像我一样)不想太深入地参与Python文件管理(这似乎过于复杂)的人来说,在我的Windows 11笔记本电脑上创建.pth文件工作得非常完美(我在Windows中使用Visual Studio Code)。所以只要找到你的虚拟环境站点包的文件夹——这是我的:

enter image description here

创建一个扩展名为.pth的文本文件——我把我的文件命名为wheal.pth:

enter image description here

为它添加路径:

enter image description here

在VS Code中最好的事情是导入语句可以识别这个路径(我必须退出VS Code并返回),所以现在更多的输入#类型:忽略来抑制检测警告消息!

在Mac上:

user@terminal$ env PYTHONPATH=module_path python3
>>> import sys
>>> sys.path
['module_path', 'plus_other_python3_paths',...]