Python中交互式会话和脚本的不一致行为

时间:2012-07-31 20:10:39

标签: python import interactive

当我运行脚本时,我遇到了这个ImportError:

$ python ~/Dropbox/code/py/ZoteroFindOrphanedFiles.py 
Traceback (most recent call last):
  File "/home/zane/Dropbox/code/py/ZoteroFindOrphanedFiles.py", line 1, in <module>
    import sqlite3
  File "/usr/lib/python3.2/sqlite3/__init__.py", line 23, in <module>
    from sqlite3.dbapi2 import *
  File "/usr/lib/python3.2/sqlite3/dbapi2.py", line 23, in <module>
    import datetime
  File "/usr/lib/python3.2/datetime.py", line 20, in <module>
    import math as _math
  File "/home/zane/Dropbox/code/py/math.py", line 3, in <module>
    from nzmath.rational import Integer, Rational
ImportError: No module named nzmath.rational

但是在运行交互式会话时我没有:

$ python
Python 3.2.3 (default, Apr 23 2012, 23:14:44) 
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> 

为什么?

3 个答案:

答案 0 :(得分:4)

问题在于:

  import math as _math
File "/home/zane/Dropbox/code/py/math.py", line 3, in <module>

您有自己的名为math.py的模块,但这与同名的标准Python模块相同。不建议这样做。

解决方法是将您的math.py重命名为其他内容,并且不要忘记删除同一目录中的math.pyc(否则您仍然会同样的问题)。

答案 1 :(得分:0)

您有一个本地文件 /home/zane/Dropbox/code/py/math.py 正在导入而不是标准的lib math模块。

解决方案是将您的/home/zane/Dropbox/code/py/math.py重命名为其他内容。

当您在/home/zane/Dropbox/code/py目录中调用脚本时会出现问题,因为这会将此目录添加到sys.path的开头,因此当Python尝试导入模块时,将首先搜索此目录。

答案 2 :(得分:0)

脚本目录中有一个名为math.py的文件,这会影响stdlib math模块。重命名文件。