【问题标题】:I'm having trouble understanding importing in python3我无法理解在 python3 中的导入
【发布时间】:2015-07-31 19:01:17
【问题描述】:

我查看了许多网站和许多相关问题,但遵循这些问题的解决方案似乎仍然没有帮助。我想也许我错过了什么,所以就这样吧。

我的项目是创建一个用于管理桌面角色扮演游戏的 DM 工具。我需要能够将我的项目分成许多不同的文件,以保持一切井井有条。 (到目前为止)我只有三个要使用的文件。我有一个名为dmtool.py3 的主文件,我有一个名为classdef.py3 的类定义文件,还有一个名为races.py3 的用于创建竞赛对象的文件。

1] 我的第一个问题是关于导入单个文件。我尝试以几种不同的方式组织文件,因此假设我的三个文件都在同一个目录中。

如果我想将我的类定义从 classdef.py3 导入到我的主文件 dmtool.py3,我该怎么做? import classdefimport classdef.py3 似乎不能正常工作,说它们没有具有该名称的模块。

2] 然后我做了一个模块,它似乎工作。我通过创建一个名为defs 的子目录并将classdef.py3 和races.py3 文件放入其中来做到这一点。我创建了__init__.py3 文件,并将import defs 放入dmtool.py3。作为测试,我将x = 1 放在races.py3 的最顶部,并将print("X =", defs.x) 放在dmtool.py3 中。我收到一条错误消息,说模块没有属性 x。

所以我想我的第二个问题是是否可以只使用其他文件中的变量。我会使用类似defs.xdefs.races.xraces.x 还是简单的x?我似乎找不到那个有效的。我需要弄清楚这一点,因为我将使用将在 races.py3 文件中定义的类的特定实例。

3] 我的第三个问题是从前两个问题衍生而来的一个简单问题。现在races.py3classdef.py3 在同一个模块中,我如何让一个访问另一个。 races.py3 必须使用classdef.py3 中定义的类。


我非常感谢任何帮助。就像我说的,我尝试查找与导入相关的其他问题,但他们的简单解决方案似乎出现了相同的错误。我没有发布我的具体文件,因为除了我提到的之外,只有非常简单的打印行或类定义。没有什么会影响导入。

谢谢, 克里斯

【问题讨论】:

  • afaik 它应该只是 *.py ...我认为您不能将扩展名命名为 py3、py2。
  • 你知道模块只是用单个文件实现的吗? defs.py 而不是 defs 目录。包使用文件夹,您需要import defs.races 才能从defs 包中加载races 模块。

标签: python file python-3.x import


【解决方案1】:

首先,不要使用.py3 作为文件扩展名。 Python 无法识别它。

Python 3 的导入系统实际上非常简单。 import foosys.path 中查找名为 foo 的包(目录)或模块(.py 文件)。

sys.path 包含各种标准目录,您通常会在其中安装库,以及 Python 标准库。 sys.path 的第一个条目通常是__main__ 脚本所在的目录。如果您以python -m foo.bar 调用Python,则第一个条目将是包含foo 包的目录。

相对导入使用不同的语法:

from . import foo

这意味着“从包含当前模块的包中导入foo 模块或包。”它在PEP 328 中有详细讨论,如果您不想为每次导入指定包的整个结构,它会很有用。

【讨论】:

  • .py3 无效?你确定吗?我已经将它用于一个完美运行的项目。文件确实运行。
  • 我最终还是改变了。我重新组织了我的文件,使其全部位于同一目录中。使用 from . import races 返回错误消息“未加载父模块,无法执行相对导入。”所以我尝试更换 .使用文件名,所有内容都在其中,并且错误提示该模块不存在。
  • 我完全删除了 from 部分。 import races 工作正常。一切正常,谢谢大家!
【解决方案2】:

启动 python 并输入以下命令:

>>> import sys
>>> sys.path

路径是python查找库的目录列表。如果您的模块不在列表中,则找不到任何模块。

【讨论】:

    猜你喜欢
    • 2021-02-11
    • 2018-09-19
    • 2022-01-03
    • 2017-02-15
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-31
    相关资源
    最近更新 更多