使用预生成的.pyc或.pyo文件拒绝访问错误

时间:2010-03-26 14:27:46

标签: python wxpython

当我尝试通过双击或从命令提示符运行.pyo文件时,我收到访问被拒绝错误

假设我有abc.py(保留主方法入口点),它导入文件xyz.py并导入wx等。

我生成.pyo文件。但是一旦我尝试运行abc.pyo,我就会得到访问被拒绝错误。

我不知道为什么会这样?任何帮助都会非常感激。

(我使用windows xp作为操作系统)。 我正在从.py制作.pyo如下。

  1. 我有一个.bat文件CompileAllToPyo.bat python -O Compileall.py
  2. Compileall.py保留以下内容
  3. 导入操作系统 import compileall os.popen3(cmdLine,'b') compileall.compile_dir('。',force = 1)

    这是所有信息 感谢

2 个答案:

答案 0 :(得分:2)

通过在终端shell执行命令hw.pyo,您可以告诉系统您的chmod +w hw.pyo文件是“可执行的”,例如(在Linux,MacOSX或任何其他Unix-y系统中)提示。例如,考虑以下简短的shell会话:

$ cat >hw.py
print('hello world')
$ python2.5 -O -c'import hw'
hello world
$ ./hw.pyo
bash: ./hw.pyo: Permission denied
$ chmod +x hw.pyo
$ ./hw.pyo
hello world
$ 

默认情况下,.pyo(和.pyc)文件未标记为可执行文件,因为它们主要是为了导入而不是直接执行(实际上,请注意我们是显式使用Python import声明创建 .pyo文件!);但是,正如这个例子所示,很容易使其中一个“可执行为主脚本”。顺便说一句,请注意:

$ cat >hw.py
print('hello world from ' + __name__)
$ python2.5 -O -c'import hw'
hello world from hw
$ chmod +x hw.pyo
$ ./hw.pyo
hello world from __main__
$ 

__name__告诉模块是否正在import编辑(因此第一个“hello world”表示“来自hw”)或作为主脚本运行(所以第二个说“来自__main__”。这就是设计为两种方式的模块通常以if __name__ == '__main__': main()之类的方式结束的原因,其中main是一个函数,如果模块作为主脚本运行,它就会被调用(它是总是最好让所有实质代码在函数中执行,而不是在模块的顶层执行。

答案 1 :(得分:1)

您没有“运行”.pyo文件,因为它不是可执行文件。您可以将它提供给python解释器来代替.py文件,但通常,您应该使用.py文件作为入口点,以便在必要时可以重新创建.pyc或.pyo文件。

$ python imported.pyo
Success!
$ ./imported.pyo
bash: ./imported.pyo: Permission denied