当我尝试通过双击或从命令提示符运行.pyo文件时,我收到访问被拒绝错误。
假设我有abc.py(保留主方法入口点),它导入文件xyz.py并导入wx等。
我生成.pyo文件。但是一旦我尝试运行abc.pyo,我就会得到访问被拒绝错误。
我不知道为什么会这样?任何帮助都会非常感激。
(我使用windows xp作为操作系统)。 我正在从.py制作.pyo如下。
导入操作系统 import compileall os.popen3(cmdLine,'b') compileall.compile_dir('。',force = 1)
这是所有信息 感谢
答案 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