#python #module #package
#python #модуль #пакет
Вопрос:
У меня возникли проблемы с созданием импортируемого пакета / библиотеки / модуля Python или любой другой правильной номенклатуры. Я использую Python 3.7
Файловая структура, которую я использую, является:
Python37//Lib//mypackage
mypackage
__init__.py
mypackage_.py
Код в __init__.py
:
from mypackage.mypackage_ import MyClass
Код в mypackage_.py
:
class MyClass:
def __init__(self, myarg = None):
self.myvar = myarg
И с моего рабочего стола я пытаюсь запустить следующий код:
import mypackage
x = MyClass(None)
Но появляется следующая ошибка:
Traceback (most recent call last):
File "C:Users***Desktopimporttest.py", line 3, in <module>
x = MyClass(None)
NameError: name 'MyClass' is not defined
Комментарии:
1. Не помещайте свой модуль в библиотеку python37. Это плохая практика. Скорее просто добавьте свой путь к модулю в pythonpath.
Ответ №1:
Вы не импортировали имя MyClass
в свое текущее пространство имен. Вы импортировали mypackage
. Чтобы получить доступ к чему-либо внутри mypackage
, вам нужно добавить к имени префикс mypackage.<Name>
import mypackage
x = mypackage.MyClass(None)
Ответ №2:
Как говорит @rdas, вам нужно добавить к имени префикс mypackage.<Name>
.
Я не рекомендую этого делать, но вы можете импортировать подстановочные знаки, чтобы x = MyClass(None)
работать:
from mypackage import *
Теперь все из mypackage
импортируется и может использоваться в текущем пространстве имен. Однако вы должны быть осторожны с импортом подстановочных знаков, потому что они могут создавать конфликты определений (если несколько модулей имеют одно и то же имя для разных объектов).