模块名与引入的包名相同的问题

模块名与引入的包名相同的问题,第1张

模块名与引入的包名相同的问题,第2张

我要写一个模块叫 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 的难言之隐吗?
答:要是两个外部库相互冲突倒可以理解
和标准库冲突,那一定是外部库的全责啊

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 模块名与引入的包名相同的问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情