假设我有一个包含 Python 模块和包的目录(在 Python 路径之外)。
如果我想让所有这些都可用于当前的 Python 解释器,我可以做sys.path.append(dir_name)
.
我怎样才能使这个目录中的选定模块或包对 Python 可用并隐藏其余的?
我考虑过创建一个单独的目录,其中包含指向这些选定模块的符号链接,但我不知道如何使其跨平台并且感觉不对。
我怀疑解决方案涉及importlib
,但我希望得到更具体的指示。
假设我有一个包含 Python 模块和包的目录(在 Python 路径之外)。
如果我想让所有这些都可用于当前的 Python 解释器,我可以做sys.path.append(dir_name)
.
我怎样才能使这个目录中的选定模块或包对 Python 可用并隐藏其余的?
我考虑过创建一个单独的目录,其中包含指向这些选定模块的符号链接,但我不知道如何使其跨平台并且感觉不对。
我怀疑解决方案涉及importlib
,但我希望得到更具体的指示。
在 linux 系统上,我执行以下操作:
export PYTHONPATH=/full/path/to/packages/packagename:$PYTHONPATH
以上是做什么的:
您可能需要使用bin/
包的目录,如果不能完全工作,您也可以将其导出到 PATH 变量。
我自己找到了一个解决方案(适用于 Python 3.5 及更高版本):
from importlib.machinery import PathFinder
from importlib.util import module_from_spec
def load_module_from_alternative_path(module_name, path):
spec = PathFinder.find_spec(module_name, path)
module = module_from_spec(spec)
sys.modules[module_name] = module
if spec.loader is not None:
spec.loader.exec_module(module)
load_module_from_alternative_path("foo", ["path_containing_foo"])
import foo