名称中带有破折号的Python模块

134 投票
2 回答
96737 浏览
提问于 2025-04-17 03:15

我有一个现成的Python模块,它的名字里有个连字符,叫做foo-bar.py。

我不太想改这个模块的名字,因为它是共享的,我得去找所有使用这个模块的地方,这样才能让我的特殊情况正常工作。

有没有办法加载一个名字里包含通常不允许的连字符'-'的模块呢?

我知道这样做不是最佳实践,但在这种情况下,我更希望不去重新设计和测试一大堆应用程序。而且我觉得我的老板也不会同意我花时间去做这样的改动。

2 个回答

86

我知道这个问题已经有了满意的答案,但我想提供另一个答案,我觉得这个答案在使用 __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 及以上版本专用

127

你可以使用 __import__() 来实现这个功能。例如:

foobar = __import__("foo-bar")

不过,你其实应该考虑重命名这个模块。这样可以避免模块的文件名和程序中使用的标识符不一致而造成的混淆。

撰写回答