Page

[python]python把文件命名成库名带来意想不到的问题

774Anson16-11-01


一个星期前使用python3.5安装requests库,前前后后重装了不下五遍,pip安装跟zip下载安装都试过了,最后还是出现报错AttributeError: module 'tempfile' has no attribute '_TemporaryFileWrapper'。使用百度谷歌搜索以及询问网友,还是没解决问题。就在今天发现了问题所在。就是:使用python的库名命名文件名会带来意想不到的错误。


这是我当时出错的目录,demo.py就是我的文件,另外一个copy.py是备用复制的一个文件,我随意地把它命名为copy.py,而这就是困住我一个星期的问题关键所在

blob.png


先来看一下demo里面的代码,很简洁,就只有一行代码

# -*- coding: utf-8 -*-
import requests


运行的时候报错信息如下,我明明只是运行demo.py,为什么错误提示里面会有同目录下的copy.py这个文件呢,然后我试着把这个文件删了,结果demo真的没有报错了,百思不得其解。


blob.png


上官网查了一下,原来copy是系统内置的一个库,难道是因为这个原因?为了解决这个疑惑,我把copy.py这个文件重命名为其他系统库dbm.py,发现没有报错,那就奇怪了。

blob.png



最后使用pycharm在requests的目录下查找copy,发现requests里面真的import了这个库,而dbm则没有引用,那就真的证实文件名跟系统库冲突了!import requests的时候把当前目录下的copy引入进来了。


blob.png


最后把copy.py删掉或者重命名为其他demo则可以正确运行




总结:python文件命名不能与已存在的库名有冲突!


来自ansion博客

2016年11月1日