我有一个现有的python模块,名称为foo-bar.py
我希望避免更改模块名称,因为模块是共享的,我将不得不追查它所使用的所有位置,以便我的特殊情况能够正常工作。
有没有办法加载名称中包含通常被禁止的模块' - '?
(我知道这不是最佳做法。但对于这种情况,我宁愿不重新设计和测试更大的应用程序。我也不认为我的公司主人会赞成我的是时候实施这样的改变了。)
答案 0 :(得分:80)
您可以使用__import__()
执行此操作。例如:
foobar = __import__("foo-bar")
但你真的应该重命名模块。这样就可以避免混淆,因为模块的文件名与程序中使用的标识符不同。
答案 1 :(得分:39)
我知道这个问题已经得到了提问者的满意答复,但是我认为这是另一个使用__import__()
有一些优点的答案。
import importlib
mod = importlib.import_module("path.to.my-module")
# mod.yourmethod()
根据文件:
"This provides an implementation of import which is portable to any
Python interpreter. This also provides an implementation which is
easier to comprehend than one implemented in a programming language
other than Python."
Python 2.7
+仅
答案 2 :(得分:0)
尝试使用下划线代替连字符。
导入pymysql_utils
为我工作,即使import pymysql-utils是pip使用的模块的名称