2016-11-13 3 views
1

This answer сообщает мне, что файл .pyc создается при запуске файла .py, который, как я понимаю, экономит время загрузки при повторном запуске. Это заставляет меня задаться вопросом, что точка файла .py после создания .pyc.Используйте файл .py или .pyc при совместном использовании/резервном копировании?

При резервном копировании кода или его совместном использовании я не хочу включать избыточные или посторонние файлы. На какой тип файла я должен сосредоточиться?

Боковой вопрос: у меня есть один сценарий, который вызывает другой. После запуска вызванный скрипт получил файл .pyc, но мастер-скрипт, выполняющий вызов, не сделал этого. Почему это так?

+2

Если вы хотите отредактировать или отладить код, вам понадобится '.py'. См. Http://stackoverflow.com/questions/3878479/why-are-main-runnable-python-scripts-not-compiled-to-pyc-files-like-modules для вашего второго вопроса. – AChampion

+0

Итак, '.py' - это главный файл, и' .pyc' всегда может быть восстановлен из него? – joechoj

+0

'.pyc' - это скомпилированный файл (из' .py', который содержит исходный код), он содержит байтовый код – Khaled

ответ

1

Если вы просто хотите запустить свой скрипт Python, все, что вы действительно need is .pyc, который является байт-кодом, сгенерированным из вашего исходного кода. См. here для получения информации о запуске файла .pyc. Я буду предупреждать, что некоторые из них немного извилистые.

Тем не менее, я рекомендую включить ваш исходный код и оставить свои файлы .pyc, поскольку они автоматически генерируются Python Interpreter. Кроме того, если вы или другой человек захотите пересмотреть/пересмотреть исходный код на более позднем этапе, вам понадобятся файлы .py. Кроме того, обычно лучше всего использовать ваш исходный код.

2

Файлы Python .pyc создаются при импорте модуля, а не при запуске скрипта верхнего уровня. Я не уверен, что вы имеете в виду, позвонив, но если вы запустили свой мастер-скрипт из командной строки и импортировали другой скрипт, то только импортированный получает .pyc.

Что касается дистрибутива .pyc-файлов, то они относятся к незначительной версии. Если вы соберете свой собственный питон или распределите несколько уязвимых файлов на основе python, то, возможно. Но лучше всего распространять файлы .py.

Правила скрипта и модуля Python кажутся немного странными, пока вы не рассмотрите его модель установки. Общей моделью установки является то, что исполняемые файлы устанавливаются где-то в системе PATH, а разделяемые библиотеки устанавливаются где-то в пути библиотеки.

Python's setup.py делает то же самое. Скрипты верхнего уровня идут в PATH, но модули и пакеты идут по пути библиотеки. Например, в моей системе pdb3 (сценарий верхнего уровня) находится на /usr/bin/pdb3 и os (импортированный модуль) на /usr/lib/python3.4/os.py. Предположим, что python скомпилирован pdb3 в pdb3.pyc. Ну, я все равно звоню pdb3, а .pyc бесполезен. Так зачем загромождать путь?

Его общий для установки для запуска с правами администратора или администратора, чтобы у вас был доступ на запись по этим путям. Но у вас не будет доступа к ним позже, как обычный пользователь. Вы можете создать setup.py .pyc-файлы во время установки. Вы получаете правильные файлы .pyc для любого python, который у вас есть, и поскольку вы используете root/admin во время установки, у вас все еще есть доступ к каталогам. Попытка создания файлов .pyc позже является проблемой, поскольку обычный пользователь не имеет доступа к каталогам.

Итак, лучше всего распространять .py файлы и setup.py создать .pyc во время установки.

+0

«call» Я имею в виду, что он открывается и запускает другой скрипт. Я не использую правильный термин? В частности, в моем главном скрипте у меня есть пара строк, которые импортируют внешний модуль, который помещается в другой файл '.py', а затем запускает функцию' main() 'этого модуля. – joechoj

+0

@joechoj - Его двусмысленность. Вы можете «импортировать» модуль и вызывать его функции (вы получаете .pyc), или вы можете выполнить скрипт как дочерний процесс, используя что-то вроде «subprocess» (no .pyc), но вы не можете вызвать скрипт. Когда вы говорите, что «он запускает другой скрипт», это означает, что он выполняется как независимый подпроцесс, но я не уверен, что вы имеете в виду здесь. Короче говоря, если вы использовали ключевое слово 'import', вы импортировали его, и вы получили .pyc. – tdelaney

+0

@joechoj - Я озвучиваю здесь педантично и, как правило, более свободный язык в порядке. В этом случае, когда мы выясняем, когда создаются файлы .pyc, это имеет значение. – tdelaney

Смежные вопросы