【问题标题】:Creating importable Python 3 package / module创建可导入的 Python 3 包/模块
【发布时间】:2019-09-10 06:26:23
【问题描述】:

我在创建可导入的 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

【问题讨论】:

  • 不要把你的模块放在 python37 库中。这是一个不好的做法。而是将您的模块路径添加到 pythonpath。

标签: python module package


【解决方案1】:

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

import mypackage

x = mypackage.MyClass(None)

【讨论】:

    【解决方案2】:

    正如@rdas 所说,您需要在名称前加上mypackage.&lt;Name&gt;

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

    from mypackage import *
    

    现在,mypackage 中的所有内容都已导入并可在当前命名空间中使用。但是,您必须小心使用通配符导入,因为它们会造成定义冲突(如果多个模块对不同的事物具有相同的名称)。

    【讨论】:

      猜你喜欢
      • 2013-02-21
      • 2021-02-05
      • 2015-10-17
      • 2014-10-04
      • 2019-10-07
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多