根据PEP8模块应该是小写的。然而,一些流行的(例如Gtk)遵循CamelCase惯例。
为了拥有pythonic代码库并减少此违反政策的漏洞,以下似乎是一种干净的方法来解决这个问题:
import CamelcasedModule as camelcased_module
pep8-naming等Linters声称这种做法违反了PEP8并导致N813
错误。
由于我没有在PEP8中找到任何直接通道来解决这个问题,所以我想知道要走哪条道路才能忠于蟒蛇的禅宗。
Sitenote:
以前这个问题以Gtk
为例:
from gi.repository import Gtk as gtk
这是误导性的,因为Gtk
是一个类而不是一个模块,因此不适用于该问题。为了透明度,因为这个问题的答案可能仍然有用,这里提到它。
答案 0 :(得分:5)
Gtk
是一个类而不是一个模块。 Class names应使用CapWords惯例。
您可以详细了解here。
答案 1 :(得分:3)
我在Tomasz Plaskota的回答中说这确实是反模式,我想修改:
在pep8的“公共和内部接口”一节/
中导入的名称应始终被视为实施细节。其他模块不能依赖于对这些导入名称的间接访问,除非它们是包含模块的API的明确记录的部分,例如os.path或包的 init 模块,它公开子模块的功能。
否则很明显,即使是标准库也会稳定地清理类CamelCase和模块lower_underscore_case ......
起初我只是略过了这个问题并存储了更多的试用版:
import Gtk as gtk
导入时的别名我经常在经典的本地快捷方式用例中使用 - 但更多:
将very_impressive_hierarchical_name_for_tools导入为our_tools
或者像datetime模块中着名的自我覆盖乐趣案例一样:
import datetime as dt
然后能够在实际的客户端代码中使用like:
a_datetime = dt.datetime.now()
答案 2 :(得分:0)
您可以这样做,以消除警告:
from gi.repository import Gtk
gtk = Gtk
你为什么要这样做?有时候保留原来的命名真的很不方便。我的用例是 python2/python3 兼容代码。考虑这个例子:
代替:
try:
import pickle
except ImportError:
import cPickle as pickle # pycharm will complain about import camelcase as lowercase
# do_something_with_pickle_later()
我写道:
try:
import pickle
except ImportError:
import cPickle
pickle = cPickle # pycharm will not complain about this.
# do_something_with_pickle_later()