Когда я импортирую весь пакет, он дает мне NameError
. Но когда я импортирую отдельные модули и запускаю тот же код, он работает правильно.
Моя структура:
Когда я запускаю main.py, как показано ниже, я получаю NameError
:
import my_package
first.say_1st()
second.say_2nd()
"C:\\Program Files\\Python312\\python.exe" "D:\\E Drive\\Training\\pythonProject1\\Sample scripts\\Package example\\main.py"
Traceback (most recent call last):
File "D:\\E Drive\\Training\\pythonProject1\\Sample scripts\\Package example\\main.py", line 4, in \<module\>
first.say_1st()
^^^^^
NameError: name 'first' is not defined. Did you mean: 'list'?
Process finished with exit code 1
Но когда я запускаю main.py
, как показано ниже, это дает ожидаемый результат.
from my_package import first
first.say_1st()
from my_package import second
second.say_2nd()
Я делаю что-то не так?
Спасибо Quamrana за ответ. Но разве это не сработает и для первого фрагмента? Я просто пытаюсь понять. Простите мое невежество
Я попробовал это: - import my_package #from my_package import * #from my_package import first my_package.first.say_1st() #from my_package import Second my_package. Second.say_2nd() Это дает мне эту ошибку. Traceback (последний последний вызов): Файл "D:\E Drive\Training\pythonProject1\Sample scripts\Package example\main.py", строка 5, в <module> my_package.first.say_1st() ^^^^^^^^^^^^^^ ^^ AttributeError: у модуля «my_package» нет атрибута «first».
Чтобы установить все пакеты, используйте from my_package import *
вместо import my_package
. Я уже видел эту проблему раньше и могу сказать только одно: Python немного странный.
Надеюсь, это решит вашу проблему.
Хотя это работает, это не рекомендуется, поскольку вы больше не сможете отследить, откуда поступает импорт.
Вы делаете это прямо во втором фрагменте кода.