这是导入驻留在任意文件夹中的python脚本的正确方法吗?

mor*_*ous 9 python

这个片段来自SO的早期答案.它大约一岁(答案未被接受).我是Python的新手,我发现系统路径真的很痛苦.我有一些用不同目录的脚本编写的函数,我希望能够将它们导入到新项目中,而不必跳过箍.

这是片段:

def import_path(fullpath):
""" Import a file with full path specification. Allows one to
    import from anywhere, something __import__ does not do. 
"""
path, filename = os.path.split(fullpath)
filename, ext = os.path.splitext(filename)
sys.path.append(path)
module = __import__(filename)
reload(module) # Might be out of date
del sys.path[-1]
return module
Run Code Online (Sandbox Code Playgroud)

它来自这里: 如何在Python中进行相对导入?

我想要一些反馈,我是否可以使用它 - 如果有任何不良副作用对新手来说可能不明显.

我打算用它这样的东西:

import_path(/home/pydev/path1/script1.py)

script1.func1()
Run Code Online (Sandbox Code Playgroud)

等等

以我打算的方式使用该功能是否"安全"?

Ale*_*lli 8

"官方"和完全安全的方法是标准Python库的imp模块.

使用imp.find_module在精确指定的可接受目录列表中查找模块 - 它返回一个3元组(file, pathname, description)- 如果不成功,file实际上是None(但它也可以提高,ImportError所以你应该使用try/ except为此以及检查if file is None:).

如果搜索成功,请调用imp.load_module(在try/中finally以确保关闭文件!),在第一个参数之后必须与name您传递的相同find_module- 它返回模块对象(phew; - ).