Ошибка возникает из-за конфликта при работе с глобальными переменными между модулями, так как компилятор не может правильно разрешить область видимости переменных a и b, которые объявлены через global в разных модулях.
Предлагаемые решения:
Вариант 1 - Реструктуризация кода:
# Li.pyw
a = None # Явная инициализация
def test1(c):
global a
a = c + 10
return a
# Sa.pyw
b = None # Явная инициализация
def test2(c):
global b
b = c + 12
return b
# Main.pyw
import Li
import Sa
c = 3
a = Li.test1(c)
b = Sa.test2(c)
print(str(a + b))
Вариант 2 - Использование классов:
# Li.pyw
class Calculator1:
def __init__(self):
self.a = None
def test1(self, c):
self.a = c + 10
return self.a
# Sa.pyw
class Calculator2:
def __init__(self):
self.b = None
def test2(self, c):
self.b = c + 12
return self.b
# Main.pyw
from Li import Calculator1
from Sa import Calculator2
c = 3
calc1 = Calculator1()
calc2 = Calculator2()
a = calc1.test1(c)
b = calc2.test2(c)
print(str(a + b))
Используйте более простую команду сборки для начала:
python -m nuitka --standalone --follow-imports --main=Main.pyw
Рекомендую начать с реструктуризации кода по варианту 1. Если это не поможет, переходите к варианту 2.
FuntSterlingovПрофи (535)
1 месяц назад
Никак не отпускала меня эта задача. Жаль было отказаться от модульности. Гугля, читая инструкцию Nuitka, снова гугля, пробуя разные варианты, как кода, так и команды сборки - я, наконец, методом "тыка", нашел ответ. Мой код был верный, иначе бы он не работал в Python'e.
FuntSterlingovПрофи (535)
1 месяц назад
Если же вам необходимо, чтобы у модулей было расширение *.pyw, то команда сборки будет выглядеть так:
python -m nuitka --standalone --mingw64 --follow-imports --enable-plugin=tk-inter --include-data-dir=data=data --remove-output --windows-console-mode=force --windows-uac-admin --product-name=Модульная_программа --file-version=1.0 --product-version=1.0 --copyright=Чернов_Сергей_Владимирович --company-name=www.numpers.ru --windows-icon-from-ico=data/Main.ico Main.pyw
Так же я пришел к выводу, что именно модули - не обязательно делать с расширенем *.pyw, даже если в них предполагается использование не консольного режима, оконный режим Windows.
Собираю проект командой:
При сборке выпадает ошибка:
Файлы проекта:
Main.pyw:
Li.pyw: Sa.pyw:
Кто знает в чем проблема? Программа в Python работает без ошибок.
Пробовал добавлять в команду сборки сами модули: Но это не помогло.