Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
5 / 5 / 0
Регистрация: 16.04.2013
Сообщений: 59

py и pyc файлы

25.02.2021, 12:47. Показов 6290. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!!!
Работаю в одном приложении. В нем есть возможность, писать расширения функционала на Python-не
Создаешь файл типа - 'имя_скрипта.py', подключаешь к программе, ну и чего надо реализовываешь.

При отработке скрипта создавалась папка '__pycache__' в которой создавался файл 'имя_скрипта.cpython-37.pyc'. И потом, когда скрипт отработан, я убирал cpython-37 из имени файла c расширением pyc, и вместо исходника "подсовывал" этот файл и все прекрасно работало

Теперь, с выходом новой версии приложения, файл с расширением *.pyc перестал создаваться. Полазив по инету, нашел вот такой способ:
Python
1
2
import compileall
compileall.compile_dir(<DIR>, force=True)
файл с расширением *.pyc создается, но когда я его переименовываю(как описал выше) и "подсовываю" вместо исходника, не чего не работает.
Подскажите, где и чего надо поменять, что бы работало все как в прежних версиях? Или все это зависит от разработчика ПО и просто так файл pyc не подключишь?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.02.2021, 12:47
Ответы с готовыми решениями:

как декомпилировать в исходник файлы байткода .pyc.
Добрый день! Я скомпилировал свой проект с помощью pyinstaller, и случайно удалил исходный код, а он мне нужен. Что мне делать?

Компиляция в .pyc
Добрый день! я тоже не большой знаток питонов, но описаный выше способ опробовал файл рус. стал читаем в нотепаде++! изменил кое...

Компиляция в .pyc
Как исходник из .py файла скомпилировать в .pyc файл? Мой Python 3.2, по какой то причине, сам это не делает, почитал опции интерпретатора...

6
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
25.02.2021, 13:12
Не надейтесь на .pyc. Все подобные приложения работают с .py, это стандарт.
0
5 / 5 / 0
Регистрация: 16.04.2013
Сообщений: 59
09.03.2021, 12:17  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
Не надейтесь на .pyc. Все подобные приложения работают с .py, это стандарт
Теперь у меня обратная задача. Есть файл pyc надо из него получить py для Python 2.5. Мое приложение использует эту версию питона
Полазив по инету узнал, что это можно сделать при помощи uncompyle6
На компе у меня стоит Pyton 3.6. При помощи pip3 установил uncompyle6. Конвертировал pyc, все прошло успешно. Но приложение при подключении py - выдает ошибку.
Так понимаю, формат у 2.5 и 3.6 разный.
Установил 2.5. По умолчанию pip-а в нем нет. Установил в ручную (через python install) - от куда скачал не помню
При установки через pip выдает следующую ошибку:
Кликните здесь для просмотра всего текста

C:\Python25\Scripts\pip-script.py run on 03/09/21 11:23:26
Requirement already satisfied (use --upgrade to upgrade): uncompyle6 in c:\python25\lib\site-packages\uncompyle6-3.7.4-py2.5.egg

Downloading/unpacking spark-parser>=1.8.9,<1.9.0 (from uncompyle6)

Getting page https://pypi.python.org/simple/spark-parser
Could not fetch URL https://pypi.python.org/simple/spark-parser: <urlopen error The connect operation timed out>
Will skip URL https://pypi.python.org/simple/spark-parser when looking for download links for spark-parser>=1.8.9,<1.9.0 (from uncompyle6)
Getting page https://pypi.python.org/simple/
Could not fetch URL https://pypi.python.org/simple/: <urlopen error The connect operation timed out>
Will skip URL https://pypi.python.org/simple/ when looking for download links for spark-parser>=1.8.9,<1.9.0 (from uncompyle6)
Cannot fetch index base URL https://pypi.python.org/simple/

URLs to search for versions for spark-parser>=1.8.9,<1.9.0 (from uncompyle6):
* https://pypi.python.org/simple/spark-parser/
Getting page https://pypi.python.org/simple/spark-parser/
Could not fetch URL https://pypi.python.org/simple/spark-parser/: <urlopen error The connect operation timed out>
Will skip URL https://pypi.python.org/simple/spark-parser/ when looking for download links for spark-parser>=1.8.9,<1.9.0 (from uncompyle6)
Could not find any downloads that satisfy the requirement spark-parser>=1.8.9,<1.9.0 (from uncompyle6)

No distributions at all found for spark-parser>=1.8.9,<1.9.0 (from uncompyle6)

Exception information:
Traceback (most recent call last):
File "c:\python25\lib\site-packages\pip-1.2-py2.5.egg\pip\basecommand.py", line 106, in main
status = self.run(options, args)
File "C:\Python25\lib\site-packages\pip-1.2-py2.5.egg\pip\commands\install.py", line 256, in run
requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
File "c:\python25\lib\site-packages\pip-1.2-py2.5.egg\pip\req.py", line 1011, in prepare_files
url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
File "c:\python25\lib\site-packages\pip-1.2-py2.5.egg\pip\index.py", line 157, in find_requirement
raise DistributionNotFound('No distributions at all found for %s' % req)
DistributionNotFound: No distributions at all found for spark-parser>=1.8.9,<1.9.0 (from uncompyle6)


Нашел uncompyle6 тут

при установки через install выдает следующую ошибку(текст ошибки в приложенном файле error.rar)

Помогите, в чем проблема?.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
09.03.2021, 13:00
Alllexx4, вообще, декомпилить .pyc - это кагбэ грязнохак. Так что, сдаётся мне, вы идёте неправильным путём.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
09.03.2021, 14:03
Alllexx4, Файл .pyc содержит байт-код основного кода. Этот файл создается только при первом запуске файла .py , или перезаписывается после редактирования кода. Байт код это не компиляция в машинные коды, как например у С++ , а преобразование кода в более компактный код питона, что бы интерпретатор работал немного быстрее.
Вот все что есть на эту тему у Лутца (соответствует питону версии 3.3):
Кликните здесь для просмотра всего текста
"
f.pyc

f - имя файла без расширения

pyc - расширение файла

uncompyle6 (это самый новый - для всех версий Python). Но просто текст он не декомпилирует - только файлы типа .pyc\.pyo

В Python 3.2 и последующих версиях файлы байт-кода .рус сохраняются в подкаталоге по имени__pycache__, расположенном в каталоге, где находятся файлы исходного кода, и их имена идентифицируют версию Python, в которой они создавались (скажем, script.cpython-ЗЗ.рус). Новый подкаталог__ pycache__ помогает избежать беспорядка, а новое соглашение об именовании файлов байт-кода предотвращает переписывание сохраненного байт-кода разными версиями Python, которые могут быть установлены на одном компьютере.

Если интерпретатор Python на вашем компьютере обладает правом записи, он будет сохранять байт-код вашей программы в виде файла с расширением .pyc (.pyc – это компилированный исходный файл .py). Вы будете обнаруживать эти файлы после запуска программ по соседству с файлами, содержащими исходные тексты (то есть в том же каталоге). Интерпретатор сохраняет байт-код для ускорения запуска программ. В следующий раз, когда вы попробуете запустить свою программу, Python загрузит файл .pyc и минует этап компиляции – при условии, что исходный текст программы не изменялся с момента последней компиляции. Чтобы определить, необходимо ли выполнять перекомпиляцию, Python автоматически сравнит время последнего изменения файла с исходным текстом и файла с байт-кодом. Если исходный текст сохранялся на диск после компиляции, при следующем его запуске интерпретатор автоматически выполнит повторную компиляцию программы. Если интерпретатор окажется не в состоянии записать файл с байт-кодом на диск, программа от этого не пострадает, просто байт-код будет сгенерирован в памяти и исчезнет по завершении программы.*1 Однако поскольку файлы .pyc повышают скорость запуска программы, вам может потребоваться иметь возможность сохранять их, особенно для больших программ. Кроме того, файлы с байт-кодом – это еще один из способов распространения программ на языке Python. Интерпретатор запустит файл .pyc, даже если нет оригинальных файлов с исходными текстами.

*1 - Строго говоря, байт-код сохраняется только для импортируемых файлов, но не для файла самой программы. Об импорте мы поговорим в главе 3 и снова вернемся к нему в части V. Байт-код также никогда не сохраняется для инструкций, введенных в интерактивном режиме, который описывается в главе 3.

Байт-код не является двоичным машинным кодом (например, инструкциями для микропроцессора Intel). Байткод – это внутреннее представление программ на языке Python. По этой причине программный код на языке Python не может выполняться так же быстро, как программный код на языке C или C++, о чем уже говорилось в главе 1. Обход инструкций выполняет виртуальная машина, а не микропроцессор, и чтобы выполнить байт-код, необходима дополнительная интерпретация, инструкции которого требуют на выполнение больше времени, чем машинные инструкции микропроцессора. С другой стороны, в отличие от классических интерпретаторов, здесь присутствует дополнительный этап компиляции – интерпретатору не требуется всякий раз снова и снова анализировать инструкции исходного текста. В результате Python способен обеспечить скорость выполнения где-то между традиционными компилирующими и традиционными интерпретирующими языками программирования."

От себя добавлю.
У меня раньше создавалась папка __pycache__ и в ней файл .pyc . После установки питона 3.8 эта папка и этот файл перестали создаваться. Но у меня теперь создается папка .vs и еще вложенные папки (я думаю ее создает Microsoft Visual Studio Community 2019 может она же подавляет файл .pyc и подсовывает свой, не знаю) и в ней файл .suo
Как написано выше, файл .pyc должен запускаться и нормально работать. Если не удастся восстановить исходник, то проанализируйте, что делает этот файл, и попытайтесь с нуля написать код файла .py самостоятельно.
Если же у Вас не запускается файл .pyc , то это значит, что он поврежден.
0
5 / 5 / 0
Регистрация: 16.04.2013
Сообщений: 59
09.03.2021, 16:21  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
Так что, сдаётся мне, вы идёте неправильным путём.

Получается так:
1. Есть первые версии CAD системы, выпушенные лет 12 назад (когда в ходу был Python 2.5). В этих версиях есть питоновские файлы и они все имеют расширение pyc.
Пару версий было так.
2. Потом выпустили версии, где появилась папка __pycache__ с pyc файлами. Но появились и файлы py. В этих файлах я мог кой чего добавлять своего, и все работало.
3. В Последней версии этой CAD системы пропали файлы pyc, и все строится на файлах py. Я так понимаю на вопрос ответил Viktorrus, так так последние версии работают с питоном 3.8

Со вторым и третьим пунктами все понятно
Вернемся к первому. Если мне хочется добавить кой чего своего, мне нужен исходник с расширением py. Его нет. Копирование исходника из поздних версий и декомпиляция вызывает следующую ошибку:
The DLL for the controller 'Python' has an old version.
Please register a current version.

От сюда я сделал вывод, что не подходит формат py файла. В первом случаи я скопировал этот файл с более поздней версии, которая поддерживает python 3.0. А декомпиляцию я делал uncompyle6, который установлен на версии python-а 3.6. На 2.5 мне uncompyle6 поставить не удалось.

Направьте на истинный путь. Буду благодарен.
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
09.03.2021, 17:12
Цитата Сообщение от Alllexx4 Посмотреть сообщение
Его нет. Копирование исходника из
То есть, вы пытаетесь под 2.5 запустить код под 3-й? Ну, если там нет python-3only feactures, то должен запуститься. Но 1. возникает вопрос, зачем вам что-то запускать на таком старье и 2. если есть python3-only features, надо будет адаптировать.

В общем, вы сами видите, что использование .pyc-файлов - это bad, и разработчики системы это поняли и перешли на .py. Вы явно идёте против течения.

Цитата Сообщение от Alllexx4 Посмотреть сообщение
декомпиляция вызывает следующую ошибку:
The DLL for the controller 'Python' has an old version.
Декомпиляция чего? Речь же про исходник на .py, так?
А насчёт dll-ки уже интереснее, надо бы разобраться, что за она.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.03.2021, 17:12
Помогаю со студенческими работами здесь

Как декомпилировать .pyc?
Как декомпилировать .pyc? В интернете висит куча инструкций, но на таджикском. Какие-то скрипты, параметры, хрень какая-то в общем! ...

Редактирование файлов .pyc
Приветы! Столкнулся с зашифрованными файлами .pyc, нужно их редактировать а навыков ноль. Помогите разобраться как к ним подойти, что бы...

Редактирование файла .pyc
Добрый день! Подскажите, как мне отредактировать файл .pyc? Спасибо :) Добавлено через 4 минуты А, все, разобрался) Спасибо)

Просмотреть функции в *pyc
У меня есть питоновский файл *pyc. Требуется просмотреть функции или классы данного файла! Как это можно сделать через Python Shell?...

Не создаётся файл .pyc
На сколько мне извесно, после выполнения файла .py, должен создаваться файл .pyc с байт-кодом, а такового файла не появляется. Хотелось бы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru