В доступе отказано ошибка с предварительно сгенерированными файлами .pyc или .pyo - PullRequest
1 голос
/ 26 марта 2010

Я получаю Ошибка доступа запрещена , когда я пытаюсь запустить файл .pyo двойным щелчком мыши или из командной строки.

Допустим, у меня есть abc.py (сохраняя точку входа основного метода), который импортирует файлы xyz.py и импортирует wx и т. Д.

Я создаю файл .pyo. Но как только я пытаюсь запустить abc.pyo, я получаю доступ запрещен ошибка.

Я не понимаю, почему это происходит? Любая помощь будет по достоинству оценена.

(я использую Windows XP в качестве ОС). Я делаю .pyo из .py следующим образом.

  1. У меня есть файл .bat CompileAllToPyo.bat, который имеет python -O Compileall.py
  2. Compileall.py хранит следующие вещи

импорт ОС импортировать компиляцию os.popen3 (cmdLine, 'b') compileall.compile_dir ('.', force = 1)

Это все информация Спасибо

Ответы [ 2 ]

2 голосов
/ 26 марта 2010

Вы можете сообщить системе, что ваш hw.pyo файл является «исполняемым», например (в Linux, MacOSX или любой другой системе Unix-y), выполнив команду chmod +w hw.pyo в командной строке терминала. Рассмотрим, например, следующий короткий и простой сеанс оболочки:

$ 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») или запускается как основной сценарий (так что второй говорит «с *» 1018 * "). По этой причине модули, предназначенные для использования в обоих направлениях, обычно заканчиваются на if __name__ == '__main__': main() или тому подобное, где main - это функция, которая, таким образом, вызывается, если модуль работает как основной сценарий (всегда лучше иметь весь существенный код выполняется в функции, а не на верхнем уровне модуля).

1 голос
/ 26 марта 2010

Вы не «запускаете» файл .pyo, так как он не является исполняемым файлом. Вы можете передать его интерпретатору python вместо файла .py, но в целом вам следует использовать файл .py в качестве точки входа, чтобы при необходимости можно было повторно создать файл .pyc или .pyo.

$ python imported.pyo
Success!
$ ./imported.pyo
bash: ./imported.pyo: Permission denied
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...