
找到的一个还行的办法
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 |
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 要是两个外部库相互冲突倒可以理解 和标准库冲突,那一定是外部库的全责啊 |