假设我有一个充满Python模块和包的目录(在Python路径之外)。
如果我想让所有这些都可用于当前的Python解释器,我可以sys.path.append(dir_name)
。
如何才能将此目录中的选定模块或包提供给Python并隐藏其余部分?
我考虑过创建一个单独的目录,其中包含所选模块的符号链接,但我不知道如何使它跨平台而且感觉不对。
我怀疑解决方案涉及importlib
,但我希望得到更具体的指针。
答案 0 :(得分:0)
在Linux系统上,我执行以下操作:
export PYTHONPATH=/full/path/to/packages/packagename:$PYTHONPATH
以上是做什么的:
您可能需要使用程序包的bin/
目录,如果不能完全正常工作,您也可以将其导出到PATH变量。
答案 1 :(得分:0)
我自己找到了一个解决方案(适用于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