【问题标题】:Add a directory to Python sys.path so that it's included each time I use Python向 Python sys.path 添加一个目录,以便在我每次使用 Python 时都包含它
【发布时间】:2011-11-20 07:23:51
【问题描述】:

目前,当尝试引用一些库代码时,我在 python 文件的顶部执行此操作:

import sys
sys.path.append('''C:\code\my-library''')
from my-library import my-library

然后,只要会话处于活动状态,my-library 就会成为 sys.path 的一部分。如果我开始一个新文件,我必须记住再次包含sys.path.append

我觉得必须有更好的方法来做到这一点。如何使my-library 可用于我的Windows 机器上的每个python 脚本,而不必每次都使用sys.path.append

【问题讨论】:

  • 将它附加到系统环境变量中的“PATH”或“PYTHONPATH”(通过控制面板)应该可以工作。
  • 另外,当你在 Windows 上写目录名时,你应该使用原始字符串而不是多行字符串(因为不幸的反斜杠):r'C:\code\my-library'!

标签: python windows sys.path


【解决方案1】:

只需将此路径添加到您的 PYTHONPATH 环境变量中。为此,请转到控制面板/系统/高级/环境变量,然后在“用户变量”部分中,检查您是否已经拥有 PYTHONPATH。如果是,选择它并点击“编辑”,如果不是,点击“新建”添加它。

PYTHONPATH 中的路径应该用“;”分隔。

【讨论】:

  • 非常感谢!我没有意识到 PYTHONPATH 是一个可以编辑的单独环境变量!这正是我所需要的。
  • 这对于您可以设置环境变量的本地安装非常有用。但是,对于基于网络的独立“安装”/部署,请使用 sitecustomize.py 方法(参见下文 Cedric Julien 的描述)。
  • 当我尝试在 SPSS Statistics 22 中运行 Python 代码并将 PYTHONPATH 设置为“C:\Program Files\Python27\Lib\site-packages”时,我得到了一个未处理的 spssengine.exe 的 win32 异常解决了问题。
  • jython 的 JYTHONPATH
【解决方案2】:
  1. 您应该使用 os.path.join 让您的代码更可靠。
  2. 您已经在路径中使用了__my-library__。所以不要在导入时第二次使用它。 如果你有这样的目录结构 C:\code\my-library\lib.py 和其中的一个函数,例如:
def main():
  print("Hello, world")

那么你的结果代码应该是

import sys 
sys.path.append(os.path.join('C:/', 'code', 'my-library'))

from lib import main 

【讨论】:

    【解决方案3】:

    如果这是您在整个代码中使用的库,您应该安装它。将其正确打包,然后将其安装在您的 site-packages 目录中 - 或者,如果它特定于某些项目,请使用 virtualenv 并将其安装在相关的虚拟环境中。

    【讨论】:

    • 我认为这可能是最好的方法。我对 Python 开发真的很陌生。你能指出我如何做到这一点的正确方向吗?
    • 是的。同样在这里。一直想知道你将如何做到这一点? @丹尼尔罗斯曼
    【解决方案4】:

    要执行此操作,您必须使用 sitecustomize.py(或 usercustomize.py)文件,您将在其中进行 sys.path 修改 (source python docs)。

    在你的python安装目录\Lib\site-packages目录下创建sitecustomize.py文件,每次启动python解释器时都会导入。

    【讨论】:

    • 使用 addsitedir()、.append() 或 .insert() 修改;不要使用 = 表示法......否则它不起作用!
    【解决方案5】:

    如果您以交互方式执行此操作,最好的做法是安装 ipython 并配置您的启动设置以包含该代码。如果你打算让它成为你从解释器运行的脚本的一部分,同样的事情也适用,因为它可以访问你的命名空间。

    另一方面,独立脚本应该自动包含它。将来,您或其他一些维护者会出现,所有代码都应该是显而易见的,并且不依赖于特定的机器设置。最好的办法是为新项目设置一个框架文件,其中包含您需要的所有基本功能。这与常用的 sn-ps 一起解决了这个问题。

    您运行脚本的所有代码都将在脚本中,您不必每次都考虑添加该代码。

    【讨论】:

      【解决方案6】:

      在多个环境中使用 jupyter,添加 .bashrc 的路径不起作用。我必须编辑该特定内核的 kernel.json 文件并将其附加到 env 部分的 PYTHONPATH 中。

      这仅在该内核中有效,但也许这可以帮助其他人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-24
        • 2022-07-27
        • 1970-01-01
        • 1970-01-01
        • 2012-12-01
        • 2021-11-17
        • 2023-03-23
        相关资源
        最近更新 更多