找到的一个还行的办法
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
1
majik 2016-05-22 00:54:45 +08:00 via iPhone
把 string 弄成文件夹 在 __init__.py 里面写你的模块,这这里面可以 import string 。还有切记别把 string 这个模块放到你的项目根路径之下,我一般会把它放进 utils 模块里面。最后说一句,使用相同的名字去封装一个模块这做法是在不可苟同。
|
2
somebody 2016-05-22 07:35:09 +08:00 via Android
import string as origstring
|
3
yangtukun1412 2016-05-22 09:24:01 +08:00 via Android
relative import
|
4
bicoff9527 OP @majik 这种做法确实不好, 但是命名时确实很容易和标准库, 特别是安装的第三方库, 出现这种情况
|
5
yangtukun1412 2016-05-22 09:40:55 +08:00
刚没看清楚问题,如果想从 string.py 中 import 标准库中的 string 库的话, 正常使用了 absolute import 的话应该是没问题的,出现你这种情况应该是因为你在同一目录下运行的程序,而 python 默认会把 cwd 加入到 sys.path 中的第一项。
解决方法可以使用 pkgutil, 其中提供了根据指定的 path 来 import module 的方法. |
6
pimin 2016-05-22 09:43:56 +08:00 1
|
7
majik 2016-05-22 11:22:16 +08:00
@bicoff9527 颗粒度都掌不好的库还是不要用了。。。 AHHH
|
8
bicoff9527 OP @majik 和颗粒度有什么关系, 命名冲突本来就很常见
|
9
ayaseangle 2016-05-22 11:45:15 +08:00 via Android
不作死就不会死。当前目录在 path 最前面。
|
10
mornlight 2016-05-22 11:51:05 +08:00
不考虑把自己的模块换个名字吗,就算当前解决了问题将来也可能会让别人踩到坑。
|
11
xiaket 2016-05-22 16:04:48 +08:00 via iPad
@bicoff9527 哪有那么容易重复?实在不行你往模块名前加一个公司 /组织名要够了啊?
|
12
4everLoveU 2016-05-23 11:32:48 +08:00
有非得命令成 string.py 的难言之隐吗?
|
13
julyclyde 2016-05-23 11:55:53 +08:00
要是两个外部库相互冲突倒可以理解
和标准库冲突,那一定是外部库的全责啊 |