导入使用原始文件,但不在 IDLE 中

Posted

技术标签:

【中文标题】导入使用原始文件,但不在 IDLE 中【英文标题】:Imports working with raw file, but not in IDLE 【发布时间】:2012-06-02 02:58:48 【问题描述】:

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

【问题讨论】:

感谢@J.F.Sebastian 更加警惕。你应该说sys.path.append("c:/users/joe_bloggs/py")...毕竟,JF 应该提出答案并获得绿勾 @J.F.你想把它作为答案吗? (因为否则我会把它贴出来(仍然说你看到了),这样这个问题就会被标记为已解决。) ACarter:没有。可以回答您自己的问题。 @gauden 的回答中的一般说明似乎更适合未来的访问者。 ACarter 和@J.F.Sebastian:您好!我已经把我的答案变成了一个社区维基。随意编辑以合并 JF 的解决方案,我们可以将其作为资源留给未来的访问者。感谢您的合作。 【参考方案1】:

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

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

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

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

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

(See also this question).

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

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

线索 3:sys.path 是什么?

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

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

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

线索 4:什么是 PYTHONPATH,它在两种环境中有何不同?

(See also this answer).

最后在 shell 和 IDLE 中作为脚本重复此操作。

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

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

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

【讨论】:

命令行给了我f:\ake\pa\th\wikipedia.pyc。抱歉,我该怎么办? (顺便说一句,感谢您迄今为止的所有帮助。)它们是不同的! IDLE 给出C:\Python27\pythonw.exe,命令行给出C:\Python27\python.exe。不同的.exe?【参考方案2】:

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

原来问题在于 Raspberry Pi 同时安装了 Python 2 和 3。我完成的安装(使用“python”命令)仅适用于 Python 2。我必须使用“python3”命令执行另一次安装才能为 Python 3 安装它。之后,我重新启动了 IDLE,一切正常。

上面打印 sys 可执行路径的建议帮助指出了差异:

import sys
print sys.executable

【讨论】:

以上是关于导入使用原始文件,但不在 IDLE 中的主要内容,如果未能解决你的问题,请参考以下文章

Python plotly 在命令行中工作,但不在 python 文件中 - 导入错误

脚本在 IDLE 中工作,但 .py 文件不起作用

导入不在路径上的python模块

Angular 9在不在app(默认)文件夹中的特定文件夹中创建组件

Python:复制文件夹时shutil.copy2方法创建一个不在原始文件夹中的.db文件,复制文件时得到NotADirectoryError

IDLE 不在 python 3.0 中启动