防止脚本目录被添加到 Python 3 中的 sys.path

fo_*_*x86 8 python python-3.x

有没有办法防止脚本的目录被添加到python3中的sys.path?由于导入在 python 中是相对的,我遇到了导入冲突。我正在使用的一个遗留项目logger.py在脚本的根目录中有一个文件,该文件与内置的logger.

我使用的自定义构建系统最终会创建指向所有文件和依赖项的符号链接,并且在生产中,在运行时我们使用该-E标志来忽略任何系统集PYTHONPATH并将路径设置为我们想要的。但是由于这种冲突,从 PyCharm 运行测试/脚本不起作用。

wpe*_*rcy 2

在脚本的顶部,您可以尝试执行以下操作:

import os
import sys

# the first element of sys.path is an empty string, meant to represent the current directory
sys.path.remove('')
Run Code Online (Sandbox Code Playgroud)

然后进行正常的导入。

请注意,这将导致当前目录中的所有相对导入失败,可能会导致比旧目录更多的问题logger.py

关于你的第二个问题,是否可以采取任何措施来阻止添加目录sys.path,简短的回答是否定的。来自Python 3文档中的“模块搜索路径”

sys.path 从这些位置初始化:

  • 包含输入脚本的目录(或未指定文件时的当前目录)。
  • PYTHONPATH(目录名称列表,与 shell 变量 PATH 具有相同的语法)。
  • 依赖于安装的默认值。


我想您可以设置从当前工作目录到另一个目录的符号链接,将实际脚本保留在那里,并将符号链接指向它。同样来自上面的文档(强调我的):

在支持符号链接的文件系统上,包含输入脚本的目录是符号链接之后计算的。