分享个 python 模块导入的坑

2016-08-02 17:27:16 +08:00
 lcj2class

python 标准库里面有个名叫 select 的 module ,所以如果你的项目里面也有个叫select.py的文件,那么可怕的事就发生了。

我的情况是没直接 import select,而是import subprocesssubprocess 里面引用了select,可见这个问题还是比较隐蔽的,希望大家不要遇到。

EVIL demo

$ cat select.py

import subprocess as sp

sp.call('ls')

$ python select.py

SO 上有很多类似的问题,这里是一例

3109 次点击
所在节点    Python
8 条回复
ayaseangle
2016-08-02 17:30:00 +08:00
这坑基本都会遇到几次,然后就免疫了。。
GeekGao
2016-08-02 17:37:30 +08:00
记得 celery 也是 >_<
zhizhongzhiwai
2016-08-02 18:28:49 +08:00
这就是相对路径导入的好处: from . import module
argsno
2016-08-02 18:50:25 +08:00
这怎么处理?
slysly759
2016-08-02 20:17:43 +08:00
没事命名别那么大众化啦
billlee
2016-08-02 21:42:05 +08:00
python 的正确使用姿势:

MyProject
|- __init__.py
|- select.py
`- __main__.py

python -m MyProject
Ge4Los
2016-08-02 22:17:52 +08:00
如果还有个 select/__init__.py 的文件夹,也会坑到。
julyclyde
2016-08-02 22:29:04 +08:00
cgi.py 飘过……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/296617

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX