【发布时间】:2016-05-18 14:45:43
【问题描述】:
我想向我的程序传递一个文件并从中获取一个函数。
例如,我有一个文件foo.py,直到运行时才知道其位置(它将通过命令行或类似的方式传递给代码),它可以位于我系统上的任何位置,看起来像这个:
def bar():
return "foobar"
如何让我的代码运行函数bar?
如果在运行时之前知道该位置,我可以这样做:
import sys
sys.path.append("path_to_foo")
import foo
foo.bar()
我可以在foo.py 所在的文件夹中创建一个init.py 文件并使用importlib 或imp,但它看起来很乱。我不能使用__import__,因为我得到ImportError: Import by filename is not supported.
【问题讨论】:
-
“我可以 [...] 使用
importlib[...] 但它看起来很乱。”当你遇到混乱的问题时,你必须求助于混乱的解决方案。为什么importlib不够用? -
另外,您根本不需要
__init__.py文件。在 Py3 中,更强大的importlib函数是导入任意文件的正确方法。在早期的 Python 中,您只需将包含foo.py的文件夹添加到sys.path,然后运行 import foo,根本不需要使用特殊的导入功能。 -
foo.py 是否与您的文件在同一目录中?
-
我使用的是 Python 2.7。我不能使用
import foo,因为直到运行时我才知道文件名。 -
我不想创建一个
init.py文件并将其放在一边,我可以事后清理它。我不知道如何才能确保摆脱它,但这是另一个话题。我必须创建一个空文件来做某事,这似乎是不正当的。
标签: python