我需要更改当前运行的python文件的路径,使其指向其父文件夹。
我必须创建一个包,它封装从子目录导入功能的代码,同时代码需要从子目录中可执行。
我有下面的代码
|--device1
| |--ControlModule
| | |--control.py
| |--ViewModule
| | |--view.py
| |--main.py
|
|--device2
| |--ControlModule
| | |--control.py
| |--ViewModule
| | |--view.py
| |--main.py
每个www.example.com从相应的模块导入控制功能。main.py imports the control functions from the corresponding modules.
文件:* device [1 - 2]/www.example.com * main.py *
from ControlModule.Controller import control
然后,模块按以下方式相互导入函数
文件:* device [1 - 2]/ControlModue/www.example.com * control.py *
form ViewModule.views import Viewer
然后,该程序在每个设备上使用 * main.py * 运行,并且工作正常。我需要保留这个功能--从每个子目录运行的 * main.py * 应该运行相应设备的代码。
我的任务是将此代码打包到一个包含所有设备的包中。我在父目录中创建了一个包,如下所示:
|--all_devices
|--device1
| |--ControlModule
| | |--control.py
| |--ViewModule
| | |--view.py
| |--main.py
|
|--device2
| |--ControlModule
| | |--control.py
| |--ViewModule
| | |--view.py
| |--main.py
|
|--pyproject.toml
|--testme.py
这样做时,我必须调整www.example.com和www.example.com文件,以便它们指向正确的设备。control.py and view.py files, so that they point to the correct devices. This means the following adaptations
文件:* device1/www.example.com * ControlModule.py *
from device1.ViewModule.views import Viewer
文件:* device2/www.example.com * ControlModule.py *
from device2.ViewModule.views import Viewer
这样,当我将这个包(我称之为"all_devices")安装到一个虚拟环境中时,我只需调用
from device1.ControlMode.Controller import controll
而且很有效
然而,这样我就破坏了每个设备的 * www.example.com * 中的相对链接。main.py* for each device. Running /device1/main.py doesn't find the modules anymore - the interpreter is looking for device1.ViewModule.views, and it can't find it, as it is run from /device1/ directory already, so the path doesn't exist.
我试着用两种方法解决这个问题,但都失败了:
1.将 * main.py * 文件的“作用域”更改为父文件夹,以便导入的链接有意义。我尝试使用 * os.chdir("..")*--这不起作用(我猜这是因为我只改变了路径变量,而不是应用程序的实际作用域)
1.在模块中的包含之前做一个if case,以便使用正确的路径,这取决于程序是如何启动的。准确地说,我将其添加到device1/www.example.com ControleModule.py:
if __file__ == "main.py":
form ViewModule.views import Viewer
else:
from device1.ViewModule.views import Viewer
这也不起作用(这个想法是运行这个包的其他文件将永远不会被称为"www.example.com")main.py ")
我将非常感谢任何关于如何解决这个问题的想法。
1条答案
按热度按时间pnwntuvh1#
我设法通过向导入添加相对路径来解决我的问题。我将这些行添加到每个 * main.py * 中