【发布时间】:2021-11-29 17:32:47
【问题描述】:
我需要为用户提供一个不在sys.path 中的模块。我想避免将模块的父目录污染sys.path 到路径,因为我不知道用户系统上可能还有哪些其他模块。有没有与下例不同的解决方案,避免将父目录添加到路径中?
# My library code
import sys
sys.path.insert(0, 'path/to/parent/dir')
import my_module
del sys.path[0]
sys.modules['my_module'] = my_module
# User code
import my_module
StackOverflow 上有类似的问题,但据我所知没有提供解决方案:
- Import arbitrary python source file. (Python 3.3+) 这似乎只适用于单个文件,不适用于目录模块。
- How to import module from parent directory without sys.path?这建议修改Python导入路径。
【问题讨论】:
-
这能回答你的问题吗? What exactly should be set in PYTHONPATH?
-
谁是“用户”?这个模块是否打算供其他程序员在他们自己的程序中使用?如果是这样,那么您应该将其打包,以便他们可以使用 pip 安装它。然后导入将自动可供他们使用。
-
@Code-Apprentice 谢谢,但这是不正确的。
sys.path从环境变量PYTHONPATH初始化并用于导入,用于解析 Python 导入。我上面给出的示例可以正常工作,但如果我要添加到sys.path的目录中有意外模块,则会失败。所以你提供的链接没有回答我的问题。 -
我从来不需要直接修改
sys.path。你想解决什么问题,你觉得你需要这样做?您尝试导入的模块不在项目目录中吗? -
@Code-Apprentice 总之,我感谢您的帮助,但我对用例非常清楚,并考虑了那些更常见的选项。我是一位经验丰富的 Python 程序员,只需要回答上面发布的具体问题 :)
标签: python python-3.x python-importlib