Невозможно импортировать модуль с пакетом Python с подпакетами в виде ZIP-архиваPython

Программы на Python
Ответить
Anonymous
 Невозможно импортировать модуль с пакетом Python с подпакетами в виде ZIP-архива

Сообщение Anonymous »

Я экспериментирую с тем, как упаковать свой код Python в виде zip-архива. Я понимаю, что есть и другие способы обмена и распространения кода. Сейчас меня особенно интересует, как заставить это работать как zip-архив.
Вот MWE. Это прекрасно работает, когда я использую его как обычный пакет.

Код: Выделить всё

main.py
TestPackage/
TestPackage/__init__.py
TestPackage/PackA/PackA.py
TestPackage/PackA/__init__.py

Код: Выделить всё

# TestPackage/__init__.py
import TestPackage.PackA

Код: Выделить всё

# TestPackage/PackA/PackA.py
def hello_from_A():
print('Hello from A!')

Код: Выделить всё

# TestPackage/PackA/__init__.py
from .PackA import *

Код: Выделить всё

# main.py
from TestPackage.PackA import hello_from_A

hello_from_A() # Hello from A!
Я бы хотел превратить TestPackage в zip-архив, который можно было бы отправить другу. Тогда они могли бы использовать его вот так.

Код: Выделить всё

main.py
TestPackage.zip

Код: Выделить всё

# main.py
import sys
sys.path.append('/path/to/zip/dir/TestPackage.zip')

from TestPackage.PackA import hello_from_A

hello_from_A()
Я создал TestPackage.zip, зайдя cd в TestPackage/ и выполнив

Код: Выделить всё

zip ../TestPackage.zip *
Но проблема в том, что когда я пытаюсь запустить main.py, как показано выше, с zip-архивом, я получаю следующую ошибку:

Код: Выделить всё

Traceback (most recent call last):
File "main.py", line 6, in 
from TestPackage.PackA import hello_from_A
ModuleNotFoundError: No module named 'TestPackage'
Почему Python не находит TestPackage? Это из-за уровня файловой структуры, на котором я создал zip? Любые предложения о том, как я могу заставить это работать?


Подробнее здесь: https://stackoverflow.com/questions/798 ... ip-archive
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»