Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否将目录永久添加到PYTHONPATH?_Python_Windows_Pythonpath - Fatal编程技术网

是否将目录永久添加到PYTHONPATH?

是否将目录永久添加到PYTHONPATH?,python,windows,pythonpath,Python,Windows,Pythonpath,无论何时使用sys.path.append,都会添加新目录。但是,一旦我关闭python,列表将恢复到以前的(默认?)值。如何将目录永久添加到PYTHONPATH?如果您正在使用bash(在Mac或GNU/Linux发行版上),请将其添加到~/.bashrc export PYTHONPATH="${PYTHONPATH}:/my/other/path" 您需要将新目录添加到环境变量PYTHONPATH,并用冒号与以前的目录内容隔开。在任何形式的Unix中,您都可以通过一个与您正在使用的任何s

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

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

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

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


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

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

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

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

只需添加awesomo的答案,您还可以将该行添加到
~/.bash_配置文件
~/.profile

中,而不是操纵
PYTHONPATH
,您还可以创建一个。首先找出Python在哪个目录中搜索此信息:

python -m site --user-site
出于某种原因,这在Python2.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上,请执行以下操作:

  • 开放式终端
  • 键入
    open.bash\u配置文件
  • 在弹出的文本文件中,在末尾添加以下行:
    export PYTHONPATH=$PYTHONPATH:foo/bar
  • 保存文件,重新启动终端,就完成了

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

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

    对我来说,当我更改
    .bash\u配置文件时,它起作用了。只是更改
    .bashrc
    文件直到我重新启动shell才起作用

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

    export PYTHONPATH="$PYTHONPATH:/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python"
    
    .bash\u概要文件的末尾。

    这适用于Windows

  • 在Windows上,使用Python 2.7转到Python安装文件夹
  • 打开库/站点包
  • 将example.pth空文件添加到此文件夹
  • 将所需路径添加到文件,每行一个

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

    为了提供更多的解释,Python将使用
    site.py
    脚本(通常位于sys.prefix+
    lib/Python/site包
    以及
    lib/site Python
    中)自动构建其搜索路径(如上所述和)。可以获得sys.prefix的值:

    python -c 'import sys; print(sys.prefix)'
    
    然后,site.py脚本根据平台的不同添加了大量目录,例如
    /usr/{lib,share}/python/dist-packages
    /usr/local/lib/python/dist-packages
    到搜索路径中,并在这些路径中搜索包含特定附加搜索路径的
    .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为“框架构建”添加了一个特殊的额外搜索路径(但似乎对python的正常命令行使用有效):
    /Library/python//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将添加该搜索路径。

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

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


    请在变量值中写入目录。这是Blue Peppers答案的详细信息。

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


    在Python 3.6.4的Ubuntu 16.04上,将上述内容添加到我的~/.bashrc中为我实现了这一点。您可以在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,否则您的路径会变得混乱

    下面的脚本在所有平台上都能工作,因为它是纯Python。它使用了此处记录的pathlib路径,使其跨平台工作。您只需运行一次,重新启动内核,就可以了。受启发。为了运行它,需要ad管理员权限,因为您修改了一些系统文件
    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))
    
    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))
    
    vim ~/.bashrc
    
    export PYTHONPATH="${PYTHONPATH}:/User/johndoe/pythonModule"
    
    source ~/.bashrc 
    
    ~/.bash_profile 
    
    export PYTHONPATH="${PYTHONPATH}:/Users/<myuser>/project_root_folder_path"
    
    source ~/.bash_profile
    
    import sys
    if not 'NEW_PATH' in sys.path:
      sys.path += ['NEW_PATH']