创建可导入的Python 3包/模块

时间:2019-04-20 06:55:31

标签: python module package

我在创建可导入的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\***\Desktop\importtest.py", line 3, in <module>
    x = MyClass(None)
NameError: name 'MyClass' is not defined

2 个答案:

答案 0 :(得分:2)

您尚未将名称MyClass导入当前的名称空间。您已导入mypackage。要访问mypackage中的任何内容,您需要在名称前加上mypackage.<Name>

import mypackage

x = mypackage.MyClass(None)

答案 1 :(得分:1)

正如@rdas所说,您需要在名称前加上mypackage.<Name>

我不建议您这样做,但是您可以通配符导入以使x = MyClass(None)起作用:

from mypackage import *

现在,mypackage中的所有内容均已导入,并且可以在当前名称空间中使用。但是,您必须谨慎使用通配符导入,因为它们会创建定义冲突(如果多个模块在不同的事物上具有相同的名称)。