使用原始文件的导入,但不是IDLE

时间:2012-05-27 09:11:22

标签: python import python-idle pywikibot

稍后更新10秒
现在修正了,感谢JF和Gauden。

更新
通过将IDLE文件保存在其他工作文件所在的目录中,我找到了一个临时修复程序。(如果可以,我仍然想知道如何完全修复它。)

这不是永久修复,所以如果您想尝试帮助它在文件保存的任何地方使用,请随意。

这是python文件的开头:

#!/usr/bin/python
# -*- coding: utf-8  -*-
import wikipedia
import pagegenerators
import sys
import re
import pywikibot
from pywikibot import *

(您可能已经注意到它是一个pywikipedia脚本,但我认为这是无关紧要的)

此文件从命令行运行良好。

但是,当我尝试使用IDLE开发脚本,或者只是使用IDLE解释器时,我收到错误:

>>> import wikipedia

Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    import wikipedia
ImportError: No module named wikipedia

我真的不知道为什么它不起作用。

我也试过这个:

>>> imp.find_module("wikipedia.py","f:/ake/pa/th/")

Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    imp.find_module("wikipedia.py","f:/ake/pa/th/")
ImportError: No frozen submodule named f:/ake/pa/th/.wikipedia.py

错误日志中给出的路径是wikipedia.py文件的正确路径,.之前只有wikipedia.py

然后我尝试将路径添加到sys.path,但这也不起作用:

>>> import sys
>>> sys.path.append("c/users/adam/py")
#the same error...

模块的路径:`c:\ users \ joe_bloggs \ py \ wikipedia.pyc

Python可执行文件:命令行:C:\Python27\python.exe,IDLE:C:\Python27\pythonw.exe

PYTHONPATH 会抛出:

Traceback (most recent call last):
  File "<pyshell#20>", line 1, in <module>
    print os.environ['PYTHONPATH'].split(os.pathsep)
  File "C:\Python27\lib\os.py", line 423, in __getitem__
    return self.data[key.upper()]
KeyError: 'PYTHONPATH'

操作系统:Windows 7

Python版本: 2.7.2

新PATH :IDLE和命令行:

C:\Program Files\Common Files\Microsoft Shared\Windows Live
C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live
C://Python27
C:\Program Files (x86)\IVI Foundation\VISA\WinNT\Bin
C:\Program Files (x86)\QuickTime\QTSystem\
C:\Program Files (x86)\Windows Live\Shared

2 个答案:

答案 0 :(得分:2)

编辑上述问题的答案相当简单,但我正在编辑此答案作为可能的故障排除检查清单以供将来参考,并作为可能需要准备问题的其他人的清单这种性质在未来。

CLUE 1:您要导入的模块的路径是什么?

>>> import wikipedia
>>> print wikipedia.__file__

这将为您提供编译模块的路径,这是一个线索。

CLUE 2:Python可执行文件的路径是什么?

See also this question)。

>>> import sys
>>> print sys.executable

在shell和IDLE脚本中尝试此操作。如果两个结果不同,那么您使用两个Python解释器,其中只有一个具有指向wikipedia模块的路径。

CLUE 3:什么是sys.path

同时在shell和IDLE中的脚本中重复此操作。

>>> print '\n'.join( sys.path )

(您可以使用sys.path.append("d:/irectory/folder/is/in")将该位置添加到sys.path。这应该将该目录添加到Python查找模块的位置列表中。)

CLUE 4:什么是PYTHONPATH,两种环境有什么不同?

See also this answer)。

最后在shell中以及IDLE中的脚本中重复此操作。

>>> import os
>>> print '\n'.join( os.environ['PATH'].split(os.pathsep) )

再次注意两个结果(来自shell和来自IDLE)并查看两个环境中PYTHONPATH是否存在差异。

如果所有这些测试都没有结果,我会尽可能多地将这些信息添加到您的问题中,因为它可以帮助您获得具体的进一步线索。还要添加您正在使用的操作系统以及您获得的任何追溯。

答案 1 :(得分:0)

尝试在Raspberry Pi上导入新安装的库时遇到了同样的问题。我按照所有说明安装了库(Adafruit RHT Sensor),它在终端上工作正常。但是,我无法在IDLE中使用它。

原来,问题是Raspberry Pi安装了Python 2和3。我完成的安装(使用&#39; python&#39;命令)仅适用于Python 2.我必须使用&#39; python3&#39;执行另一次安装。命令安装它为Python 3.之后,我重新启动IDLE,一切正常。

上面打印sys可执行文件路径的建议有助于指出差异:

import sys
print sys.executable