Python模块,名称中带有破折号或连字符( - )

Ski*_*man 79 python import module

我有一个现有的python模块,其名称为foo-bar.py

更改模块名称是我希望避免的,因为模块是共享的,我将不得不追查它使用的所有位置,以便我的特殊情况可以工作.

有没有办法加载名称中包含通常被禁止的' - '的模块?

(我确实理解这不是最佳做法.但对于这种情况,我宁愿不重新设计和测试更大的应用程序.我也不认为我的公司主人会赞成我花时间实施这样的改变.)

nan*_*dhp 89

你可以使用__import__().例如:

foobar = __import__("foo-bar")
Run Code Online (Sandbox Code Playgroud)

但你真的应该重命名模块.这样,您可以避免模块的文件名与程序中使用的标识符不同的混淆.

  • 如何使用这种方法导入子模块? (18认同)
  • 谢谢.我确实理解在任何可行的地方都应遵循惯例.我将在部门代码审查期间提出这个具体问题. (4认同)

Nuc*_*eon 50

我知道这个问题已经得到了提问者的满意答复,但这是另一个我认为具有上述优点的答案__import__().

import importlib
mod = importlib.import_module("path.to.my-module")
# mod.yourmethod()
Run Code Online (Sandbox Code Playgroud)

根据文件:

"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."
Run Code Online (Sandbox Code Playgroud)

Python 2.7 +仅

  • 我正在寻找如何做到这一点,你的答案比我的答案更适合我的情况.如果您看到现有的答案,将其添加为新答案,以便像我这样的人能够在一个地方找到所有相关信息,那么总是很好. (5认同)
  • 在 python 文档中,不鼓励使用“__import__”(请参阅​​[文档](https://docs.python.org/3/library/functions.html#import__)),而支持“importlib”。它可能会导致很多问题。(另请参阅[`这篇文章`](/sf/ask/93948991/)) (2认同)