如何停止Python混淆具有相同名称的子目录?

问题描述

我有一个应用程序,该应用程序被设计为一种包装,用于运行许多开源存储库,然后可视化它们的结果。

项目布局的相关部分如下:

project/
|--repos/
   |--repo1/
      |--utils/
      |--somecode.py
   |--repo2/
      |--utils/
      |--somemorecode.py
|--myapp/
   |--main.py

作为应用程序入口点的文件 myapp 中的 main.py 。这会调用 somecode.py somemorecode.py 中包含的方法,这些方法会返回结果。

我遇到的问题是Python查找错误的utils文件夹,因此导入失败。例如,当我从 somemorecode.py 导入一个函数 main.py 时,我正在导入的文件尝试访问位于以下位置的 utils 文件夹在 repo1 中。

到目前为止,我已经尝试了对PYTHONPATH的修改,在运行时编辑sys.path(显然不建议这样做),但是前者似乎并不能解决问题,而后者大概是由于必须在代码之间滑动而引发了缓存问题从两个存储库中快速连续地获得。

存储库是开源GitHub存储库,需要保持不变。这些未设置为软件包,因为它们打算用作自包含应用程序,但是为了比较目的,我将它们一起运行。这两个存储库都包含带有 init .py 文件的utils软件包。

somecode.py 使用诸如from utils.file import function的导入,而 somemorecode.py 使用完全相同的导入,但是应该访问 utils repo2 文件夹。

解决方法

您可以使用as关键字。它允许您为导入的模块/对象指定自定义名称。

from repo1 import utils as repo1_utils
from repo2 import utils as repo2_utils

然后只需访问您指定的新名称即可调用所需的名称:

repo1_utils.some_function()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...