编Tensorflow编了好几个程序了,都是正常运行。
为了记录每一次调参的结果和对应的代码,我的python文件命名为one.py,two.py,three.py等。
直到six.py时,报错了。
from google.protobuf import descriptor as _descriptor
File "C:\anaconda\lib\site-packages\google\protobuf\descriptor.py", line 37, in <module>
import six
File "C:\Users\weidiao\Desktop\python实验室\人脸识别卷积神经网络\six.py", line 24, in <module>
x = tf.placeholder(tf.float32, [None, IMAGE_SIZE, IMAGE_SIZE, NUM_CHANNELS], name='x-input')
AttributeError: module 'tensorflow' has no attribute 'placeholder'
我还以为程序运行着把tensorflow玩坏了。
其实是因为protobuf这个包中引用了six.py,而我的six.py把正确的six.py给覆盖了。
看见没,这就是Python使用不规范包名的后果,在Java中写了一堆org、com并不白写,Java中包的定位更精确、更无二义性。再过几十年,Python中的全部包几乎好名字都被占了,那时人们再想给Python写个库的时候就要哭了。