我正在尝试为我正在制作的某种文字冒险游戏制作登录系统。我注意到,当我从编辑器外部执行登录文件时,它无法识别我在配置包中放入的变量(参见屏幕截图)。我从包中导入它们,它在编辑器中工作,但是当它被带入终端时,它不再识别它。我觉得这可能是因为我的代码没有被编译成单个可执行文件。
这引出了我的第二点:如何将项目导出到单个文件中? (也许它打开终端,联系我的用户识别处理程序,然后继续进入主脚本 - 实际上包含文本冒险的那个。)基本上:
User Opens Program:
All Files Are Loaded
The "Register" File Is Loaded To Identify The User
A Main Script Is loaded (yet to be created, will probably be in the first directory, not its own package)
编辑中的我的项目
终端读取:
Traceback (most recent call last):
File "/home/zachary/IdeaProjects/Python/Text-Adventure/DataHandler/Register.py", line 2, in <module>
from config import variables
ImportError: No module named config
答案 0 :(得分:0)
您的Register.py位于DataHandler文件夹中。当您从某个本地模块使用导入时,它应位于同一文件夹或某些子文件夹中。你不能从上层文件夹导入模块(实际上你可以通过在运行时指定路径,但这不是推荐的做法)。
所以,你有两个解决方案:
1)将Register.py放在文件夹中,其中包含config文件夹或variables.py文件。然后根据“config”文件夹的存在使用“from config import variables”或“import variables” 这不是最好的解决方案,因为,您必须将所有模块放在一个可访问配置的文件夹中。
2)更好的解决方案:在您的Register.py中创建一个类,它将“变量”作为__init __()方法中的参数。在你的根__init__.py文件中导入这个类和variables.py(因为__init__.py位于项目的根文件夹中,它可以访问子文件夹中的所有模块),并创建一个Register类的实例,传递变量它的构造函数。
所以,你将解决你的初始问题,你的代码将更加分离和可维护(你需要将变量传递给Register构造函数,但你不需要存储变量,您可以将其移动到数据库表,如果需要,可以移动到Redis中)