Как решить ошибку импорта при запуске скомпилированного файла (.pyc)?

Я использую питон 3.6.

У меня есть структура каталогов ниже:

 test_run.py

 addition --> add.py

У меня есть файл test_run.py, который импортирует одну из функций с именем add_values() из add.py, присутствующих в каталоге или пакете Addition.

Код для test_run.py и add.py приведен ниже:

test_run.py:

from addition.add import add_values
 
print(add_values(5,4))

add.py:

def add_values(a,b):
    return (a+b)

Я скомпилировал все, используя cpython compileall, чтобы создать файл .pyc для каждого файла python. Потому что я хочу избавиться от всех файлов python и использовать только файлы байтового кода или скомпилированные файлы.

test_run.py создал test_run.cpython-36.pyc
, а add.py создал add.cpython-36.pyc.

Затем я удалил настоящие файлы Python (test_run.py и add.py) и запустил скомпилированный файл test_run.cpython-36.pyc, но он выдает ошибку:

ModuleNotFoundError: No module named 'addition.add' 

Он отлично работает с исходными файлами (test_run.py), он дает сбой только тогда, когда я запускаю файл байт-кода (test_run.cpython-36.pyc) без исходных файлов (после удаления исходных файлов)

Пожалуйста, подскажите, как мне избавиться от исходных файлов Python и использовать только файлы с байтовым кодом? Я хочу добиться полной обфускации кода.


person Yogesh    schedule 15.07.2020    source источник
comment
папка Addition с заглавной буквы A, но вы импортируете как addition со строчной буквой a? Корректно ли работает программа при запуске из исходных файлов или в обоих случаях происходит сбой?   -  person Tadhg McDonald-Jensen    schedule 15.07.2020
comment
это опечатка, имя папки «дополнение», и код отлично работает с исходными файлами. Сбой только с файлами байт-кода   -  person Yogesh    schedule 15.07.2020
comment
всегда помещайте полное сообщение об ошибке (начинающееся со слова Traceback) в вопрос (не комментарий) в виде текста (не снимка экрана). Есть и другая полезная информация.   -  person furas    schedule 15.07.2020
comment
код может запускаться из другой папки, и тогда текущий рабочий каталог отличается (отметьте os.getcwd()), и вам может потребоваться получить путь к папке с кодом и добавить его в PATH.   -  person furas    schedule 15.07.2020
comment
Он отлично работает с исходным файлом (test_run.py и add.py), он терпит неудачу, когда я удаляю исходный файл (test_run.py и add.py) и запускаю файл байт-кода (test_run.cpython-36.pyc)   -  person Yogesh    schedule 15.07.2020
comment
Отвечает ли это на ваш вопрос? Как запустить проект Python с использованием папки __pycache__?   -  person ead    schedule 15.07.2020


Ответы (1)


Насколько я знаю, невозможно просто использовать байт-код для запуска вашего скрипта Python. Папка pycache предназначена только для ускорения процесса импорта, и сама по себе она не может быть импортирована.

вот полезный пост, который объясняет, что делает папка pycache. Что такое pycache

person Saad Ahmad    schedule 15.07.2020