0

我在工作区中有两个项目:PROJECTA 和 PROJECTB

我将两个项目的路径添加到环境变量中

变量名:PYTHONPATH 变量值:C:\path-to-PA\PROJECTA;C:\path-to-PB\PROJECTB;

我有以下 PROJECTA 和 PROJECTB 的目录结构

PROJECTA
    com
       example
            sample
                projAAA
                   srcfiles
                   testcasefiles


PROJECTB
    com
       example
            sample
                projBBB
                   srcfiles
                   testcasefiles

我正在尝试从 PROJECTB 中的 testcasefiles 目录中的 srcfiles 目录导入文件

from com.example.sample.projectBBB.srcfiles import pythonfile.py

Python 抛出异常:

ImportError:没有名为 projectBBB.srcfiles 的模块

从环境变量中的 PYTHONPATH 中删除 PROJECTA 路径时不会出现此错误

如何解决这个问题,我可以添加多个项目路径。

4

1 回答 1

1

好吧,Python 总是将“com”的第一次出现(在 PROJECTA 中)作为模块“com”,如果它在其中找不到任何东西,甚至不会寻找“com”的其他出现。Python 不会“合并”模块——如果你仔细想想,这是没有意义的,因为模块可以是任意通用和复杂的。

解决方案 A(正常)

包含在PYTHONPATH项目上方的目录中,并使用前缀对模块进行寻址,例如:

from PROJECTA import com as comA
from PROJECTB import com as comB
from comA.example.sample.projectBBB.srcfiles import pythonfile.py

顺便提一句。我们默认假设您有__init__.py文件应该在的位置(即在所有应该被视为模块的目录中)。

解决方案 B(奇怪)

与前一种情况一样,在 PYTHONPATH 中包含项目上方的目录,但要创建第三个目录结构,如下所示:

MODULE_MERGE
    com
        example
            sample

编辑MODULE_MERGE/com/example/sample/__init__.py文件以包含以下内容:

from comA.example.sample import projAAA
from comB.example.sample import projBBB

现在愉快地包括MODULE_MERGE在你的PYTHONPATH

问题是这样做是否合理。我不这么认为。Python 项目应该是自包含的,并且通常没有深度嵌套的命名空间。

于 2013-08-27T20:12:24.713 回答