我只是偶然发现了python中的这种意外行为(2.7和3.x):
>>> import re as regexp
>>> regexp
<module 're' from '.../re.py'>
>>> from regexp import search
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'regexp'
Run Code Online (Sandbox Code Playgroud)
当然是from re import search成功的,就像我创建别名之前一样.但为什么我不能使用别名regexp(现在是一个已知模块)作为导入名称的来源?
此设置你的,只要有一个模块的多个变种一个讨厌的惊喜:说我仍在使用Python 2和我想使用的C版pickle,cPickle.如果我然后尝试从中导入一个名称pickle,它将从简单pickle模块中获取(我不会注意到它,因为它不会引发错误!)
>>> import cPickle as pickle
>>> from pickle import dump
>>> import inspect
>>> inspect.getsourcefile(dump)
'.../python2.7/pickle.py' # Expected cPickle.dump
Run Code Online (Sandbox Code Playgroud)
哎呀!
闲逛我看到,sys.modules包括真正的模块名称(re或者cPickle,而不是别名regexp或 …
我正在使用PyFacebookPython中的包,我看到人们多次提到你可以编写一个import语句,如下所示:
from facebook.djangofb import facebook
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用.它表明facebook.method_name存在于facebook模块中,而不是djangofb模块中.我假设我正在导入facebook.method_nameas facebook,而不是我从facebook包本身接收它.
我正在使用Python 2.6.
我怎样才能别名facebook.djangofb为facebook?
命名空间在 Python 中被广泛使用,但创建命名空间似乎没有简短的形式,例如需要冗长的types.SimpleNamespace, 以及前面的import types.
那么有没有创建命名空间的语法快捷方式呢?
这是不可能的import types.SimpleNamespace as Ns,因为它给出了错误:
ImportError: No module named 'types.SimpleNamespace'; 'types' is not a package
Run Code Online (Sandbox Code Playgroud)