【问题标题】:Permanently add a directory to PYTHONPATH?将目录永久添加到 PYTHONPATH?
【发布时间】:2011-03-25 01:11:05
【问题描述】:

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

【问题讨论】:

    标签: python windows pythonpath


    【解决方案1】:

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

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

    【讨论】:

    • 这对我来说非常有效,但请确保您指向的目录位于目录结构中最顶部的 init.py 文件中。起初,这对我来说并不完全清楚。例如,我尝试了 export PYTHONPATH=$PYTHONPATH:/Users/joey/repos 但它不起作用,因为我的 repos 目录没有 _init_.py。再往下看一个目录:/Users/joey/repos/specificRepo 成功了。现在python可以遍历任何连接到包含init.py的特定Repo目录的向下目录!
    • 这对我有用,但你能解释一下这个 PYTHONPATH 变量的位置吗?以及“导出 PYTHONPATH”如何知道找到那个确切的文件?
    • 记得编辑~/.bashrc然后运行source ~/.bashrcstackoverflow.com/questions/2518127/…
    • 我认为将 sudo su 放在 .bashrc 文件的开头是个坏主意。 This post 同意我的看法。至少在我的系统上,它甚至没有必要。
    • 为什么这让我觉得将 python 部署到生产环境可能会很痛苦。
    【解决方案2】:

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

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

    【讨论】:

    • 勘误表:windows 上的分隔符是分号。如果您需要覆盖 Windows 上的系统路径,通过 GUI 设置为用户环境变量可能不够,因为用户变量附加到系统变量。在这些情况下,您需要借助启动脚本进行必要的调整。
    • @Nathan, tx 用于提醒分号,但是(如果你当然是管理员)你可以设置 system env.vars在 Windows 上(另外,OP 没有询问如何 覆盖 路径,只是询问如何 追加 到它,因此,用户 env.var 也可以!-).
    • 不幸的是,我不是我工作电脑的管理员,所以我不得不采取这些措施。 :(
    • "在 Windows 中,您可以通过系统 GUI 来实现。" - 这对我不起作用。我必须在下面实施 andrei deusteanu 的解决方案..
    【解决方案3】:

    除了操作PYTHONPATH,您还可以创建path configuration file。首先找出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 2.6 尝试过,但它似乎不适合我
    • 我只是将此目录符号链接到我自己的库目录并将我的所有脚本存储在那里。工作正常。
    • 再次找到这个主题后,决定再次尝试,并设法让它像上面一样工作!投赞成票并深表歉意:)
    • 这非常有效,我在正确的轨道上,但 python -m site --user-site(create the directory if it doesn't exist) 部分是我所缺少的它工作。
    • 我是否需要采取额外的步骤以便 python 识别到 somelib.pth 的添加路径?如果没有,有什么猜测为什么这可能不起作用?
    【解决方案4】:

    这适用于 Windows

    1. 在 Windows 上,使用 Python 2.7 转到 Python 设置文件夹。
    2. 打开 Lib/site-packages。
    3. 将 example.pth 空文件添加到此文件夹。
    4. 将所需的路径添加到文件中,每行一个。

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

    【讨论】:

    • IMO,这是最好的解决方案,因为它不依赖于外壳或工作环境的选择。也适用于 linux,默认 python 路径是“/usr/local/lib/pythonX.Y/site-packages”。如果这不起作用,请尝试将 .pth 文件放入 dist-packages 目录。
    • Windows 7,Python 3.6.5。这就是答案。正如 auserdude 所写:在 Python 的 Lib/site-packages 文件夹中创建“example.pth”,然后像这样添加路径:C:\somefolder\anotherfolder\targetfolder
    • 优秀的答案,也适用于 windows 10 上的 python 3.7,我的 windows 10 路径是:"C:\Users\{usrName}\AppData\Local\Programs\Python\Python37-32\Lib"
    • 可以确认它适用于 Windows 10 上的 Python 3.6.7。但是,请注意,路径附加到您的 PYTHONPATH 意味着在名称冲突的情况下将找不到您附加的模块.
    • 看起来这基本上等同于 andrei deusteanu 的回答。您需要管理权限才能保存到该文件夹​​。我正在使用搅拌机 2.8,Windows 10 ..
    【解决方案5】:

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

    1. 打开终端
    2. 输入open .bash_profile
    3. 在弹出的文本文件末尾添加这一行: export PYTHONPATH=$PYTHONPATH:foo/bar
    4. 保存文件,重启终端,大功告成

    【讨论】:

    • 任何想知道如何查看 python 路径的人,请使用:which python
    • 很确定你也需要重新加载终端
    • 实际上 export 键是我错过的东西!!!!,点赞,非常感谢!
    【解决方案6】:

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

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

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

    【讨论】:

    • sys.path.append('/path/to/dir') 不会永久添加条目。
    【解决方案7】:

    为了给出更多解释,Python 将使用 site.py 脚本(通常位于 sys.prefix + lib/python<version>/site-packages 以及 @987654326 @)。可以获取sys.prefix的值:

    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 config包含特定附加搜索路径的文件。例如,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 above)。这似乎是大多数包添加到 sys.path 的方式,而不是使用 PYTHONPATH。

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

    【讨论】:

      【解决方案8】:

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

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

      让我开心,例如:

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

      在此之后:

      source ~/.bash_profile
      

      【讨论】:

        【解决方案9】:

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

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

        【讨论】:

          【解决方案10】:

          对我来说,当我更改 .bash_profile 文件时它起作用了。仅更改 .bashrc 文件才有效,直到我重新启动 shell。

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

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

          .bash_profile 文件的末尾。

          【讨论】:

          • 如果我理解正确,这将只导出通过终端启动的 Python 会话的变量,对吗?
          • @jxramos - 是的!
          【解决方案11】:

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

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

          将以上内容添加到我的 ~/.bashrc 对我来说在 Ubuntu 16.04 上起到了作用

          【讨论】:

          • 我做了echo PYTHONPATH,但什么也没出现!这意味着这个 PYTHONPATH 还没有被初始化,所以我把这行export PYTHONPATH=$PYTHONPATH:&lt;PATH_TO_TF&gt;/TensorFlow/models/research/object_detection 粘贴到我的~/.bashrc 文件和source ~/.bashrc 中。后来,当我执行 `echo $PYTHONPATH` 时,它给了我:&lt;PATH_TO_TF&gt;/TensorFlow/models/research/object_detection,如果我做错了什么有什么建议吗?
          • export PYTHONPATH=&lt;PATH_TO_TF&gt;/TensorFlow/models/research/object_detection,当您第一次导出 PYTHONPATH 时,您必须在没有 ${PYTHONPATH}: 部分的情况下执行此操作
          • 谢谢,但是每当我重新启动计算机时,python 路径都会重置为我设置的第一个路径,即:&lt;PATH_TO_TF&gt;/TensorFlow/models/research/object_detection,并删除第二个export PYTHONPATH=$PYTHONPATH:/TensorFlow/models/research/slim。对此有何建议,如何解决?
          【解决方案12】:

          只是为了添加 awesomo 的答案,您还可以将该行添加到您的 ~/.bash_profile~/.profile

          【讨论】:

          • 如果使用登录shell,则添加到.bash_profile,否则使用.profile
          【解决方案13】:

          这是对该线程的更新,其中有一些旧答案。

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

          【讨论】:

            【解决方案14】:

            下面的脚本适用于所有平台,因为它是纯 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))
            

            【讨论】:

            • 我是手动完成的(转到 arnaud 的页面..)。我必须以管理员身份运行我的文本编辑器,然后重新启动搅拌机以查看更改。所以我想,原则上,如果有办法改进这个答案或代码,那就是遵守管理员特权的要求,并提供适当的解决方案。这超出了我的工资等级(从某种意义上说,更有经验的人会对这个有意见。我把它留给他们!)XD
            • 您可以通过将.pth 文件写入python -m site --user-site 返回的目录来避免管理员权限(以及整个路径搜索逻辑)。也称为python -c "import site; print(site.USER_SITE)"。你不能假设这个用户站点目录会存在,但你可以创建它。
            • 太棒了,这段代码帮助我为我的要求创建了一些东西。干杯!!! stackoverflow.com/a/66372128/2007153
            【解决方案15】:

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

            在终端中添加 ~/.bashrc 配置文件的路径:

            vim ~/.bashrc
            

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

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

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

            source ~/.bashrc 
            

            希望这会有所帮助。

            【讨论】:

            • 我知道这篇文章已经过时了,但如果你能向我解释一下 source 命令是什么?
            • @abdelhamedab​​din source 命令从当前 shell 环境中指定为其参数的文件读取并执行命令。将函数、变量和配置文件加载到 shell 脚本中很有用。
            【解决方案16】:

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

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

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

            【讨论】:

            • @y.y 哈哈...Windows Vista 于 2006 年问世。我仍然认为提及运行时硬件环境对答案很有帮助 :)
            • 你说得对,这也让我笑了:D先生,祝你有美好的一天:)
            【解决方案17】:

            在 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】:

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

              当我从 bash 切换到 zsh 时遇到了 Python Path 问题。

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

              Pip 向我展示了 scripts blah blahpackage blah blah 安装在 不在路径中的 ~/.local/bin.

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

              我只需要取消注释一行:

              看看

              【讨论】:

                【解决方案19】:

                受 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)
                

                【讨论】:

                  【解决方案20】:

                  我在这里找到了在 anaconda 环境中执行此操作的解决方案:https://datacomy.com/python/anaconda/add_folder_to_path/

                  只是:

                  conda develop /your_path

                  【讨论】:

                    【解决方案21】:

                    A之间的最短路径 B是直线;

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

                    【讨论】:

                      猜你喜欢
                      • 2012-08-31
                      • 1970-01-01
                      • 2013-04-13
                      • 2023-04-01
                      • 2018-04-14
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多