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


92

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

共享模块时,我更希望避免更改模块名称,并且必须逐一删除所有使用该模块的位置,以便我的特殊情况能够正常工作。

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

(我确实知道这不是最佳实践。但是,在这种情况下,我宁愿不要重新设计和测试更大的应用程序集。而且我也不认为我的公司老板会赞成我花时间实施这样的变化。)


5
您不能只是在IDE中进行文件查找,然后foo-barfoobar或替换所有?那有多难?
2011年


2
这个答案特别是:stackoverflow.com/questions/761519/...
BenH

agf简短答案:并不是我的全部代码。
跳过霍夫曼

S.Lott的其他用户是商业应用程序。我知道这是可能的。
跳过霍夫曼

Answers:


98

您可以使用来实现__import__()。例如:

foobar = __import__("foo-bar")

但是,您实际上应该重命名模块。这样,当模块的文件名与程序中使用的标识符不同时,您可以避免混淆。


4
谢谢。我确实理解,只要可行,就应该遵循约定。我将在部门代码审查期间提出这个特定问题。
跳过霍夫曼

57

我知道这个问题已经得到了问询者的满意,但是这是另一个我认为有使用价值的问题__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 仅+


5
我正在寻找如何执行此操作,因此您的答案比以前的答案更适合我的情况。如果您看到一个已经存在的答案的独特答案,然后将其添加为新答案,那么这样总是很好,以便像我这样的人可以在一处找到所有相关信息。
戴维M,

0

尝试使用下划线代替连字符。

导入pymysql_utils

尽管import pymysql-utils是pip使用的模块的名称,但对我有用

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.