永久添加目录到PYTHONPATH?

时间:2010-08-04 02:28:07

标签: python windows save pythonpath sys

每当我使用sys.path.append时,都会添加新目录。但是,一旦我关闭python,列表将恢复到之前的(默认?)值。如何将目录永久添加到PYTHONPATH

20 个答案:

答案 0 :(得分:371)

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

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

答案 1 :(得分:114)

您需要将新目录添加到环境变量PYTHONPATH中,并用以前内容的冒号分隔。在任何形式的Unix中,您都可以在适合您正在使用的任何shell的启动脚本中执行此操作(.profile或其他任何内容,具体取决于您最喜欢的shell),并且该命令同样取决于所讨论的shell ;在Windows中,您可以通过系统GUI实现此目的。

superuser.com可能是一个更好的地方进一步询问,即如果您需要有关如何在您选择的平台和shell中丰富环境变量的详细信息,请提供更多详细信息,因为它本身并不是一个编程问题。< / p>

答案 2 :(得分:78)

您还可以创建path configuration file,而不是操纵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"

答案 3 :(得分:27)

这适用于Windows

  1. 在Windows上,使用Python 2.7转到Python安装文件夹。
  2. 打开Lib / site-packages。
  3. 将example.pth空文件添加到此文件夹。
  4. 为文件添加所需的路径,每行一个。
  5. 然后,您将能够从脚本中查看这些路径中的所有模块。

答案 4 :(得分:19)

您可以通过pythonrc文件添加路径,默认为linux上的〜/ .pythonrc。即

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

您还可以在全局rc文件中设置PYTHONPATH环境变量,例如在mac或linux上的~/.profile,或通过控制面板 - &gt;系统 - &gt;高级标签 - &gt; Windows上的环境变量。

答案 5 :(得分:19)

如果有人仍然感到困惑 - 如果您使用的是Mac,请执行以下操作:

  1. 打开终端
  2. 输入open .bash_profile
  3. 在弹出的文本文件中,在末尾添加以下行: export PYTHONPATH=$PYTHONPATH:foo/bar
  4. 保存文件,重新启动终端,然后完成

答案 6 :(得分:12)

为了提供更多解释,Python将使用site.py脚本(通常位于sys.prefix + {{中)自动构建其搜索路径(如abovehere所述)。 1}}以及lib/python<version>/site-packages)。可以获取sys.prefix的值:

lib/site-python

然后,site.py脚本会根据平台(例如python -c 'import sys; print(sys.prefix)' /usr/{lib,share}/python<version>/dist-packages)向搜索路径添加许多目录,并搜索这些路径以查找/usr/local/lib/python<version>/dist-packages配置包含特定其他搜索路径的文件。例如, easy-install 维护其已安装软件包的集合,这些软件包被添加到系统特定文件中,例如在Ubuntu上<package>.pth。在一个典型的系统上,有很多这些.pth文件可以解释sys.path中的一些意外路径:

/usr/local/lib/python2.7/dist-packages/easy-install.pth

因此,可以创建一个.pth文件并放入任何这些目录(包括提到的above中的sitedir)。这似乎是大多数软件包添加到sys.path的方式,而不是使用PYTHONPATH。

注意:在OSX上,site.py为“框架构建”添加了一个特殊的附加搜索路径(但似乎适用于python的正常命令行使用):python -c 'import sys; print(sys.path)' (例如,对于Python2.7:{ {1}})这是应该安装第三方软件包的地方(参见该目录中的自述文件)。因此,可以在其中添加包含其他搜索路径的路径配置文件,例如创建一个名为/Library/Python/<version>/site-packages的文件,其中包含/Library/Python/2.7/site-packages/,然后系统python将添加该搜索路径。

答案 7 :(得分:9)

在linux上,您可以创建从包到PYTHONPATH目录的符号链接,而无需处理环境变量。类似的东西:

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

答案 8 :(得分:9)

对我来说,当我更改.bash_profile文件时,它可以正常工作。只需更改.bashrc文件,直到我重新启动shell。

对于python 2.7,它应该如下所示:

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

.bash_profile文件的末尾。

答案 9 :(得分:6)

如果export PYTHONPATH="${PYTHONPATH}:/my/other/path"当前不存在(由于PYTHONPATH),则向{/。bashrc添加:可能无效。

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

将上面的内容添加到我的〜/ .bashrc中,在Ubuntu 16.04上为我做了诀窍

答案 10 :(得分:5)

只需添加awesomo的答案,您也可以将该行添加到~/.bash_profile~/.profile

答案 11 :(得分:3)

这是对此线程的更新,其中包含一些旧答案。

对于使用MAC-OS Catalina或更高版本(> = 10.15)的用户,它引入了一个名为zsh的新终端(替代旧bash)。

由于此更改,我在上面的答案中遇到了一些问题,我通过创建文件~/.zshrc并将文件目录粘贴到$PATH$PYTHONPATH上做了一些变通办法< / p>

所以,首先我做了:

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。

答案 12 :(得分:2)

在MacOS上,而不是提供到特定库的路径。为

中的根项目文件夹提供完整路径
~./bash_profile 

例如,让我过得开心:

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

执行此操作后:

source ~./bash_profile

答案 13 :(得分:1)

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

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

请在“变量”值中写入目录。这是Blue Peppers答案的细节。

答案 14 :(得分:1)

向PYTHONPATH添加新路径是通过以下方式手动完成的:

在终端机中通过以下方式将路径添加到〜/ .bashrc配置文件中:

vim ~/.bashrc

将以下内容粘贴到您的个人资料

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

然后,确保您在终端中运行代码时都获取bashrc配置文件的来源:

source ~/.bashrc 

希望这会有所帮助。

答案 15 :(得分:0)

以下脚本是纯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))

答案 16 :(得分:0)

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

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

答案 17 :(得分:0)

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

答案 18 :(得分:0)

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

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

解决方案很简单,但是我没有注意到。

Pip告诉我,脚本 blah blah软件包 blah blah安装在{strong> {strong}不在路径中。

在阅读了有关此问题的一些解决方案之后,我打开~/.local/bin来发现该解决方案已经存在。

我只需要取消注释行:

看看

Screenshot from 2020-10-07 13-38-17

答案 19 :(得分:0)

受 andrei-deusteanu 回答的启发,这是我的版本。这允许您在站点包目录中创建许多其他路径。

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)