将一个目录添加到Python的sys.path中,以便每次使用Python时都包含该目录。

18

目前,在尝试引用一些库代码时,我会在 Python 文件的顶部这样做:

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

那么,只要 session 处于活动状态,my-library 就会成为 sys.path 的一部分。如果我启动一个新文件,我必须记得再次包含 sys.path.append

我觉得肯定有更好的方法。如何使 my-library 在我的 Windows 机器上对每个 Python 脚本都可用,而无需每次使用 sys.path.append


4
将其添加到系统环境变量中的"PATH"或"PYTHONPATH"中(通过控制面板)应该就可以了。 - Benjamin
7
在Windows上写目录名时,应该使用原始字符串而不是多行字符串(因为不幸的反斜杠): r'C:\code\my-library'!请注意不要改变原文意思,并尽可能使翻译通俗易懂。 - Tim Pietzcker
6个回答

24

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

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


1
非常感谢!我没有意识到PYTHONPATH是一个单独的环境变量,我可以编辑它!这正是我所需要的。 - Ben McCormack
1
这对于本地安装非常有效,您可以设置环境变量。然而,对于独立的基于网络的“安装”/部署,请使用sitecustomize.py方法(请参见Cedric Julien的描述)。 - Mark
当我尝试在SPSS统计22中运行Python代码并将PYTHONPATH设置为“C:\ Program Files \ Python27 \ Lib \ site-packages”时,spssengine.exe出现未处理的win32异常问题。 - JYurkovich
Jython的JYTHONPATH - GoTo

7
  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 

4
如果这是你在代码中使用的库,你应该按照正确的方式将其打包,并安装到你的site-packages目录中。如果它只针对特定项目,请使用virtualenv并仅在相关的虚拟环境中安装它。

3
我认为这可能是最好的方法。我在Python开发方面很新手。你能指点我如何做吗? - Ben McCormack
是的,我也一样。一直在想你会如何实际做到这一点?@Daniel Roseman - Chen Lizi

3
要做这样的事情,您需要使用sitecustomize.py(或usercustomize.py)文件,在其中进行sys.path修改(源Python文档)。
将sitecustomize.py文件创建到python安装目录下的\Lib\site-packages目录中,它将在每次启动python解释器时被导入。

使用 addsitedir()、.append() 或 .insert() 进行修改;不要使用 = 符号,否则它将无法工作! - Mark

0

使用jupyter时,添加路径到.bashrc文件并没有起作用。我不得不编辑特定内核的kernel.json文件,并将其附加到env部分的PYTHONPATH中。

这只在该内核中起作用,但也许可以帮助其他人。


0

如果您正在交互式地进行此操作,最好的方法是安装 ipython并配置启动设置以包括该代码。如果您打算将其作为从解释器运行的脚本的一部分,则同样适用,因为它将可以访问您的命名空间。

另一方面,独立的脚本不应自动包含该代码。在未来,您或其他维护人员将会出现,所有代码都应该是明显的,并且不依赖于特定的机器设置。最好的方法是为新项目设置一个框架文件,其中包括您需要的所有基本功能。这样,连同常用的片段,就可以解决问题。

您的所有用于运行脚本的代码都将在脚本中,您无需考虑每次添加该代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接