模块名与引入的包名相同的问题
我要写一个模块叫 string, 也就是 string.py
并且要在这个文件里 import 标准库中的 string
好像用 from __future__ import absolute_import 也没用?
这个好像是从同一个包下, 区别引用标准库模块还是引用其它文件, 比如从 foo 中引用 string, 这样才可以区分
不改名的情况下怎么解决?从 sys.path 里删掉当前路径?感觉不是很 pythonic
这个方法试过了是可行的
但是有没有更好的?
找到的一个还行的办法
import sys
import imp
exec_prefix = sys.exec_prefix
python_ver = sys.version[:3]
libpython = os.path.join(exec_prefix, "lib", "python"+python_ver)
try:
f, fname, mode = imp.find_module('string', [libpython])
string = imp.load_module('string', f, fname, mode)
except ImportError:
pass
----------------------- 以下是精选回复-----------------------
答:把 string 弄成文件夹 在 __init__.py 里面写你的模块,这这里面可以 import string 。还有切记别把 string 这个模块放到你的项目根路径之下,我一般会把它放进 utils 模块里面。最后说一句,使用相同的名字去封装一个模块这做法是在不可苟同。
答:import string as origstring
答:relative import
答:刚没看清楚问题,如果想从 string.py 中 import 标准库中的 string 库的话, 正常使用了 absolute import 的话应该是没问题的,出现你这种情况应该是因为你在同一目录下运行的程序,而 python 默认会把 cwd 加入到 sys.path 中的第一项。
解决方法可以使用 pkgutil, 其中提供了根据指定的 path 来 import module 的方法.
答:https://gist.github.com/28sui/80df6a025a20cfe4f9b90917b8ea16b0
答:不作死就不会死。当前目录在 path 最前面。
答:不考虑把自己的模块换个名字吗,就算当前解决了问题将来也可能会让别人踩到坑。
答:有非得命令成 string.py 的难言之隐吗?
答:要是两个外部库相互冲突倒可以理解
和标准库冲突,那一定是外部库的全责啊
0条评论