2010-03-26 57 views
1

我得到一个访问被拒绝错误而我试图通过双击或从命令提示符运行.pyo文件。使用预生成的.pyc或.pyo文件访问被拒绝

可以说我有abc.py(保持主要方法入口点),其中进口文件xyz.py进口WX等

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

我不明白为什么会发生这种情况?任何帮助将非常感激。

(我使用Windows XP作为操作系统)。 我使用.py作为.pyo,如下所示。

  1. 我有具有 蟒蛇-O Compileall.py
  2. 的Compileall.py保持follwoing事情

进口OS 进口compileall OS .bat文件CompileAllToPyo.bat。 popen3(CMDLINE, 'b') compileall.compile_dir( '',力= 1)

这是所有的信息 由于

+1

你在哪个平台上?另外,当您尝试运行abc.py而不是.pyo文件时会发生什么情况? – 2010-03-26 14:38:08

+0

更多细节将会有用。 *您是如何*生成'.pyo'文件的?作为哪个用户?什么用户帐户,然后尝试使用它下?如果原始的'.py'文件不存在,问题是否仍然存在?您是否检查了相关用户帐户对文件具有哪些特权(包括读取和写入)?等等 – 2010-03-26 14:38:08

+0

对于那些回答,“访问被拒绝”意味着这是一个Windows盒子。如果是这样,特定于Linux的解决方案可能没有帮助。 – 2010-03-26 18:46:19

回答

1

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

​​
+1

@JimB,实际上,在Windows上,.pyo文件(与.pyc或.py一样)有效地显示为可执行文件(对于菜鸟),因为文件扩展名与Python解释器之间存在关联。当你双击文件的图标时,你会调用它的解释器,就像在posix-y系统上的hash-bang行一样。我怀疑“访问被拒绝”意味着他在Windows上,但当然我们几乎不知道这个问题有什么用处,所以谁知道...... – 2010-03-26 18:44:28

+0

啊!我甚至不认为他的意思是用这种方式“运行”pyo文件。 – 2010-03-26 18:45:39

+1

@Peter - 谢谢,我不知道Windows会这么做(我已经干了8年了)。 – JimB 2010-03-26 19:16:11

2

您可以通过在终端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是一种函数,如果模块作为主脚本运行,则这种函数会被调用(最好是执行所有实际代码在一个函数中,而不是在模块的顶层)。