使用预生成的.pyc或.pyo文件访问被拒绝
我得到一个访问被拒绝错误而我试图通过双击或从命令提示符运行.pyo文件。使用预生成的.pyc或.pyo文件访问被拒绝
可以说我有abc.py(保持主要方法入口点),其中进口文件xyz.py进口WX等
我产生.pyo文件。但一旦我尝试运行abc.pyo,我得到的访问被拒绝错误。
我不明白为什么会发生这种情况?任何帮助将非常感激。
(我使用Windows XP作为操作系统)。 我使用.py作为.pyo,如下所示。
- 我有具有 蟒蛇-O Compileall.py
- 的Compileall.py保持follwoing事情
进口OS 进口compileall OS .bat文件CompileAllToPyo.bat。 popen3(CMDLINE, 'b') compileall.compile_dir( '',力= 1)
这是所有的信息 由于
您不会“运行”.pyo文件,因为它不是可执行文件。您可以将它提供给python解释器来代替.py文件,但通常,您应该使用.py文件作为您的入口点,以便可以在必要时重新创建.pyc或.pyo文件。
@JimB,实际上,在Windows上,.pyo文件(与.pyc或.py一样)有效地显示为可执行文件(对于菜鸟),因为文件扩展名与Python解释器之间存在关联。当你双击文件的图标时,你会调用它的解释器,就像在posix-y系统上的hash-bang行一样。我怀疑“访问被拒绝”意味着他在Windows上,但当然我们几乎不知道这个问题有什么用处,所以谁知道...... – 2010-03-26 18:44:28
啊!我甚至不认为他的意思是用这种方式“运行”pyo文件。 – 2010-03-26 18:45:39
@Peter - 谢谢,我不知道Windows会这么做(我已经干了8年了)。 – JimB 2010-03-26 19:16:11
您可以通过在终端shell提示符下执行命令chmod +w hw.pyo
告诉系统你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
ED(所以第一个“世界你好”说:“从hw
”)或运行为主脚本(所以第二个说: “从__main__
”)。这就是为什么设计成两种方式使用的模块通常以if __name__ == '__main__': main()
或类似结尾结尾,其中main
是一种函数,如果模块作为主脚本运行,则这种函数会被调用(最好是执行所有实际代码在一个函数中,而不是在模块的顶层)。
你在哪个平台上?另外,当您尝试运行abc.py而不是.pyo文件时会发生什么情况? – 2010-03-26 14:38:08
更多细节将会有用。 *您是如何*生成'.pyo'文件的?作为哪个用户?什么用户帐户,然后尝试使用它下?如果原始的'.py'文件不存在,问题是否仍然存在?您是否检查了相关用户帐户对文件具有哪些特权(包括读取和写入)?等等 – 2010-03-26 14:38:08
对于那些回答,“访问被拒绝”意味着这是一个Windows盒子。如果是这样,特定于Linux的解决方案可能没有帮助。 – 2010-03-26 18:46:19