试图让PLY第一次运作

时间:2015-11-07 02:27:52

标签: python ply interactive-mode

我是Python的新手,我在尝试使PLY工作时遇到了一些问题。目前,我想要的只是从example成功运行PLY homepage

首先我尝试下载PLY-3.8,将 ply 文件夹放在我保存示例( calc.py )的同一目录中并运行它。 calc.py 文件位于 C:\ Users \ ... \ Python 目录中, ply 文件夹位于 C :\ Users \ ... \ Python \ ply ,只是为了让它更清晰。但我得到了ImportError: No module named 'ply'

然后我搜索了一段时间,尝试更新名为 distutils 的东西并通过Windows PowerShell等安装模块,但是这些都没有用,我只是重置整个事情(重新安装Python和所有这些)。但后来我终于通过简单地插入 sys.path 来运行我运行的脚本(交互模式下的编辑:)的目录路径了这样:

import sys
sys.path.insert(0,'C:\\Users\\ ... \\Python')

这解决了 ImportError 但是,这就是我现在所处的地方,还有很多其他错误:

Traceback (most recent call last):
  File "C:\Users\...\Python\calc.py", line 48, in <module>
    lexer = lex.lex()
  File "C:\Users\...\Python\ply\lex.py", line 906, in lex
    if linfo.validate_all():
  File "C:\Users\...\Python\ply\lex.py", line 580, in validate_all
    self.validate_rules()
  File "C:\Users\...\Python\ply\lex.py", line 822, in validate_rules
    self.validate_module(module)
  File "C:\Users\...\Python\ply\lex.py", line 833, in validate_module
    lines, linen = inspect.getsourcelines(module)
  File "c:\users\...\python\python35\lib\inspect.py", line 930, in getsourcelines
    lines, lnum = findsource(object)
  File "c:\users\...\python\python35\lib\inspect.py", line 743, in findsource
    file = getsourcefile(object)
  File "c:\users\...\python\python35\lib\inspect.py", line 659, in getsourcefile
    filename = getfile(object)
  File "c:\users\...\python\python35\lib\inspect.py", line 606, in getfile
    raise TypeError('{!r} is a built-in module'.format(object))
TypeError: <module '__main__'> is a built-in module

现在我完全不知道该怎么做。我试图寻找解决方案,但没有运气。如果有人能帮助我,我感激不尽。

我在 Windows 10 上,使用 Python 3.5.0 iep 作为我的IDE(www.iep-project)。如果这些信息具有任何重要性。

简而言之:我只是想从PLY主页成功运行该示例,然后我想我可以弄清楚其余部分。

编辑:我发现如果我这样做:

import inspect
inspect.getfile(__main__)

我从之前得到完全相同的(最后一个)错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "c:\users\...\python\python35\lib\inspect.py", line 606, in getfile
    raise TypeError('{!r} is a built-in module'.format(object))
TypeError: <module '__main__'> is a built-in module

我认为这是罪魁祸首,但我仍然不知道如何解决这个问题。

编辑2:我开始工作并回答了解释问题的问题,但如果有人有更完整的答案,我很乐意听到。

1 个答案:

答案 0 :(得分:0)

对于遇到此问题的任何人,我发现了问题所在。我仍然不知道为什么会这样,所以如果有人有更完整的答案提供我会很感激(我仍然是Python的新手)。

无论如何,似乎此代码无法在交互模式中执行,它需要作为脚本执行。要在IEP上执行此操作,请运行&gt;以脚本 Ctrl + Shift + E 运行文件。在IDLE上,您需要打开... 文件( Ctrl + O )然后运行模块 F5 )。

至于为什么它不能在交互模式中执行,这里有一点关于交互模式和从IEP向导作为脚本运行之间的区别:

  

互动模式与以脚本身份运行

     

您可以正常运行当前文件或主文件,也可以作为脚本运行。当作为脚本运行时,将重新设置shell(原文如此)以提供干净的环境。 shell也以不同方式初始化,因此它非常类似于正常的脚本执行。

     

在交互模式下,sys.path [0]是一个空字符串(即当前目录),sys.argv设置为['']。

     

在脚本模式下,__ file__和sys.argv [0]设置为脚本filename,sys.path [0],工作目录设置为包含脚本的目录。

这解释了为什么inspect.getfile(__ main__)抛出错误:__ main__没有属性__file__。还有为什么我必须将当前目录插入到sys.path中:sys.path没有以交互模式使用当前目录。

我希望这有助于某人。