我查看了许多网站和许多相关问题,但是按照这些问题的解决方案仍然没有帮助。我想也许我错过了什么,所以这里。
我的项目是创建一个用于管理桌面角色扮演游戏的DM工具。我需要能够将我的项目拆分成许多不同的文件,以保持一切井井有条。 (到目前为止)我只有三个我正在尝试使用的文件。我有我的主文件,我称之为dmtool.py3
,我有一个名为classdef.py3
的类定义文件,我有一个文件用于创建名为races.py3
的种族对象。
1] 我的第一个问题是关于导入单个文件。我尝试用几种不同的方式组织文件,所以为此我假设我的三个文件都在同一个目录中。
如果我想将classdef.py3中的类定义导入到我的主文件dmtool.py3中,我该怎么做? import classdef
和import 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.x
或defs.races.x
或races.x
或简称x
之类的内容吗?我似乎无法找到有效的那个。我需要解决这个问题,因为我将使用将在races.py3
文件中定义的类的特定实例。
3] 我的第三个问题是一个简单的问题,它来自前两个问题。现在races.py3
和classdef.py3
位于同一模块中,如何让一个访问另一个模块。 races.py3
必须使用classdef.py3
中定义的类。
我真的很感激任何帮助。就像我说的那样,我尝试查找与导入相关的其他问题,但是他们的简单解决方案似乎提出了相同的错误。我没有发布我的特定文件,因为除了我提到的,只有非常简单的打印行或类定义。什么都不应该影响导入。
谢谢, 克里斯
答案 0 :(得分:1)
首先,不要将.py3
用作文件扩展名。 Python无法识别它。
Python 3的导入系统实际上非常简单。 import foo
查看sys.path
,查找名为foo的包(目录)或模块(.py
文件)。
sys.path
包含您通常会安装库的各种标准目录,以及Python标准库。 sys.path
的第一个条目通常是__main__
脚本所在的目录。如果以python -m foo.bar
调用Python,则第一个条目将是包含foo
包的目录。
相对导入使用不同的语法:
from . import foo
这意味着“从包含当前模块的包中导入foo
模块或包。”在PEP 328中对此进行了详细讨论,如果您不想为每次导入指定包的整个结构,则会非常有用。
答案 1 :(得分:0)
启动python并输入以下命令:
>>> import sys
>>> sys.path
该路径是python查找库的目录列表。如果您的模块不在列表中,则找不到任何模块。