【问题标题】:In Python script, how do I set PYTHONPATH?在 Python 脚本中,如何设置 PYTHONPATH?
【发布时间】:2011-03-07 16:51:01
【问题描述】:

我知道如何在我的 /etc/profile 和我的环境变量中设置它。

但是如果我想在脚本中设置它怎么办? 是导入操作系统,系统吗?我该怎么做?

【问题讨论】:

    标签: python linux unix environment-variables


    【解决方案1】:

    您没有设置PYTHONPATH,而是将条目添加到sys.path。它是一个应搜索 Python 包的目录列表,因此您只需将目录附加到该列表即可。

    sys.path.append('/path/to/whatever')
    

    实际上,sys.path 是通过在路径分隔符上拆分 PYTHONPATH 的值来初始化的(在类似 Linux 的系统上是 :,在 Windows 上是 ;)。

    您还可以使用site.addsitedir 添加目录,该方法还将考虑您传递的目录中存在的.pth 文件。 (您在PYTHONPATH 中指定的目录不会出现这种情况。)

    【讨论】:

    • 这个答案发布已经有很多年了,但我仍然想补充一点,如果你想确保 Python 在导入时检查新目录之前的所有其他目录,你应该把新目录在列表的首位,如sys.path.insert(0, '/path/to/whatever')。
    【解决方案2】:

    您可以通过os.environ获取和设置环境变量:

    import os
    user_home = os.environ["HOME"]
    
    os.environ["PYTHONPATH"] = "..."
    

    但是由于您的解释器已经在运行,这将不起作用。你最好使用

    import sys
    sys.path.append("...")
    

    这是您的PYTHONPATH 在解释器启动时将转换为的数组。

    【讨论】:

      【解决方案3】:

      PYTHONPATH 以 sys.path 结尾,您可以在运行时对其进行修改。

      import sys
      sys.path += ["whatever"]
      

      【讨论】:

      • 有理由更喜欢这个答案而不是@DavidZ 的答案吗?
      • 如果没有别的,那就不那么冗长了。
      【解决方案4】:

      如果您输入sys.path.append('dir/to/path') 而不检查它是否已经添加,您可以在sys.path 中生成一个长列表。为此,我建议这样做:

      import sys
      import os # if you want this directory
      
      try:
          sys.path.index('/dir/path') # Or os.getcwd() for this directory
      except ValueError:
          sys.path.append('/dir/path') # Or os.getcwd() for this directory
      

      【讨论】:

      • 不错。非常 Pythonic。
      • 如何清空 PythonPath?我不想追加。我想清空它,把我只想要的东西放进去。有没有办法做到这一点?
      • 您是否尝试通过调用 sys.path.__init__() 重新初始化它?这应该是空的 python 路径。希望这会有所帮助。
      • @francisco-manuel-garca-botella 本网站非常欢迎回答老问题!没什么好遗憾的。
      • 我不同意这是 pythonic,我认为这不是一个好的编程方法。当异常发生时,异常处理是非常昂贵的,所以你不想用它来替换很可能使用 else 的“if”语句。一个简单的 if 'mypath' in sys.path ... else ... 将是我的建议。
      【解决方案5】:

      可以通过os.environ['PATHPYTHON']=/some/path设置PYTHONPATH,然后需要调用os.system('python')重启python shell,使新添加的路径生效。

      【讨论】:

      • os.system() 不会“重新启动 python shell”,它会启动一个新的交互式 Python 实例。当你从那里返回时,你又回到了调用脚本中。
      【解决方案6】:

      我在 linux 下也可以:

      import sys
      sys.path.extend(["/path/to/dotpy/file/"])
      

      【讨论】:

      • 将extend 与路径一起用作列表中的单个元素与将append 与实际路径本身一起使用没有什么不同。这个答案没有提供比当前接受的答案更多的用处。
      猜你喜欢
      • 2016-03-14
      • 2017-05-03
      • 2011-05-22
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 2012-10-11
      相关资源
      最近更新 更多