2011-09-28 54 views
45

我有现有的Python模块名称中带有一个破折号,foo-bar.pyPython模块用破折号或连字符( - )的名称中

更改模块名称是东西,我宁愿避免因为模块是共享的,我将不得不追逐所有使用它的地方,这样我的特殊情况才会起作用。

有没有办法加载名称中包含通常被禁止的' - '的模块? (我明白这不是最佳实践,但是对于这种情况,我不想重新设计和测试更多的应用程序,我也不认为我的公司主人会赞同我的服用方式执行此类更改的时间。)

+5

你不能只是做一个发现,在档案在你的IDE和替换所有'FOO,bar's与'foobar'或其他?那有多难? – agf

+2

http://stackoverflow.com/questions/761519/is-it-ok-to-use-dashes-in-python-files-when-trying-to-import-them – BenH

+2

这个答案特别是:http:// stackoverflow.com/questions/761519/is-it-ok-to-use-dashes-in-python-files-when-trying-to-import-them/762693#762693 – BenH

回答

64

您可以使用__import__()来执行此操作。例如:

foobar = __import__("foo-bar") 

但是你真的应该改名模块来代替。这样可以避免模块的文件名与程序中使用的标识符不同的混淆。

+3

谢谢。我确实知道应该在任何可行的地方遵循公约。我将在部门代码审查期间提出这个具体问题。 –

+13

如何导入一个子模块使用这种方法? – Fydo

25

我知道这个问题已经回答了满意的提问者,但这里是另一个答案,我认为有一些优点使用__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

我正在寻找如何做到这一点,你的答案比旧的答案适用于我的情况更好。如果你看到已有人的独特答案,将其添加为新的答案,这样一来,像我这样的人就可以在一个地方找到所有相关信息,这总是很好。 –

相关问题