有没有办法防止脚本目录添加到python3中的sys.path中?由于导入在python中是相对的,因此出现导入冲突。我正在使用的旧项目在脚本的根目录中有一个名为logger.py
的文件,该文件与内置logger
冲突。
我使用的定制构建系统最终创建了指向所有文件和依赖项的符号链接,并在生产中,在运行时,我们使用-E
标志忽略任何系统集PYTHONPATH
并将路径设置为我们想要的。但是由于这种冲突,无法从PyCharm运行测试/脚本。
答案 0 :(得分:1)
在脚本顶部,您可以尝试执行以下操作:
import os
import sys
# the first element of sys.path is an empty string, meant to represent the current directory
sys.path.remove('')
然后正常导入。
当心,这将导致从当前目录中的所有 all 相对导入失败,并可能导致比传统logger.py
关于您的第二个问题,首先是否可以做些阻止目录添加到sys.path
的事情,简短的回答是“否”。来自Python 3 docs on "module search path":
sys.path从以下位置初始化:
- 包含输入脚本的目录(如果未指定文件,则为当前目录)。
- PYTHONPATH(目录名称列表,语法与shell变量PATH相同。)
- 与安装有关的默认设置。
我想您可以建立一个从当前工作目录到另一个目录的符号链接,在其中保留实际脚本,然后将符号链接指向它。同样来自上述文档(重点是我的):
在支持符号链接的文件系统上,将在遵循符号链接的 之后计算包含输入脚本的目录。