如何在不知道路径的情况下从其他相对文件夹导入



我正在Pygame中开发一款小视频游戏。我希望它在文件夹层次结构中非常清晰,所以,我已经用这种方式准备好了:

Python 
Project 
bin
init.py
Project.vbs
lib
constants.py
definitions.py
sprites ( useless for topic )
Project.exe

Project.exe是一个墨迹文件,是一个伪可执行文件。事实上,打开init.py是Project.vbs的快捷方式(它只是为了拥有最清晰的文件夹管理)。

我的问题是什么?我想从"bin"文件夹中的init.py导入definitions.py和constants.py,这对游戏来说绝对至关重要。顺便说一句,文件保存在我的USB密钥上,但这个文件的路径总是会改变:

在我自己的电脑上,它是C:/user/Save19/Python/...

在我高中的电脑上,是P:/documents/Python(实习)

在我的手机上是/storage/0/Python/...

每当我复制时,路径就会改变。。。

所以我读了很多关于试图解决这个问题的主题,但任何时候都不起作用:/

我已经尝试使用:

Import constants from lib import constants from lib.definitions import *我已经尝试了操作系统和路径

import sys sys.path.insert(0, 'Project/lib') import constants

import sys sys.path.append('Project/lib') import constants

但它无论如何都不起作用。。。有人能给我一个解决方案并向我解释一下吗?

这实际上取决于您从哪里开始Python进程。您添加的任何路径都应该相对于该位置。所以你说它是从bin开始的,所以你可以添加

import os
import sys
sys.path.append(os.path.abspath('../lib'))
import constants

您也可以将__init__.py添加到lib,然后将".."添加到路径并执行import lib.constants as constants

或者,您可以将整个程序设置并安装为Python包,然后使用绝对导入(如import mygame.lib.constants as constants)。

最新更新