gpt4 book ai didi

Python导入文件夹

转载 作者:太空宇宙 更新时间:2023-11-04 10:58:47 31 4
gpt4 key购买 nike

我使用的是 Python 2.6。我是 Python 编程的新手,请原谅我的无知。我有多个包含多个包的目录。我的目录结构如下所示:

/disconfig
__init__.py
/LLE
__init__.py
/DIS
__init__.py
/Data
__init__.py
/common
__init__.py
/LLE
__init__.py

我需要能够导入两个 LLE 目录才能使程序运行。我无法将 disconfig 或 common 添加到 PYTHONPATH,因为它们都有一个 LLE 目录。当我导入 LLE 时,它只会引入其中一个。我试过这样做:

import disconfig.LLE

它错误地说:

Traceback (most recent call last):
File "./disconfig.py", line 9, in <module>
import disconfig.LLE
File "./disconfig.py", line 9, in <module>
import disconfig.LLE
ImportError: No module named LLE

我试过:

import disconfig

这有效,但是当我尝试从其中一个模块中运行代码时:

LLE.DIS.runDisFunc

它回来说

name 'LLE' not defined

如果我尝试:

disconfig.LLE.DIS.runDisFunc

它说错误:

'module' object has no attribute 'LLE'

我已经为此工作了很长时间,无法全神贯注。有什么建议吗?

编辑:也许还有一件事要提。这些目录中的文件由 ZeroC 的 slice2py 生成。他们将所有生成的 .py 文件放在顶级目录中(因此在/disconfig 下)。 LLE 目录包含 init.py,它包含所有生成的 .py 文件的导入以及“导入 DIS”和“导入数据”。然后在 DIS 和数据中,有 init.py 文件,其中包含特定于这些模块的导入。所以,更完整地看起来像:

/disconfig
__init__.py
Attribute_ice.py
DIS_ice.py
DISControl_ice.py
/LLE
__init__.py
/DIS
__init__.py
/Data
__init__.py

如果我将模块从 disconfig 更改为 MDIS(按照建议)并执行

import MDIS

我明白了

Traceback (most recent call last):
File "./disconfig", line 9, in <module>
import MDIS
File "/oudvmt/python/MDIS/__init__.py", line 18, in <module>
import LLE
File "/oudvmt/python/MDIS/LLE/__init__.py", line 4, in <module>
import Attribute_ice
ImportError: No module named Attribute_ice

如果我尝试

import MDIS.LLE

我明白了

Traceback (most recent call last):
File "./disconfig", line 9, in <module>
import MDIS.LLE
File "/oudvmt/python/MDIS/__init__.py", line 18, in <module>
import LLE
File "/oudvmt/python/MDIS/LLE/__init__.py", line 4, in <module>
import Attribute_ice
ImportError: No module named Attribute_ice

我尝试将生成的 .py 文件移动到子目录中,但这导致了其他问题,因为/DIS 中的文件依赖于/Data 中的文件(DIS_ice.py 导入 Attribute_ice.py,它是 LLE/数据)。如果我将它们分开,我会得到 ImportErrors。

更多编辑:我将所有 .py 文件添加到我的/MDIS 目录中的 init.py 中,并将它们从子目录中的 init.py 中删除。现在我只使用“import MDIS”就没有更多的导入错误了。但是,现在当我尝试我的功能时

 disadmin = MDIS.LLE.DIS.DISAdminPrx.checkedCast()

我明白了

'module' object has no attribute 'DISAdminPrx'

在 DISAdmin_ice.py 中,有一个名为 DISAdminPrx 的类,它确实有一个 checkedCast 方法。我试过了

disadmin = DISAdmin_ice.DISAdminPrx.checkedCast()

disadmin = MDIS.LLE.DIS.DISAdmin_ice.DISAdminPrx.checkedCast()

以及我能想到的任何其他组合。

再次编辑看起来这是我从 ZeroC 使用的 python 转换器的问题。他们正在帮我解决。感谢您的帮助!

最佳答案

您的脚本似乎名为 disconfig.py,因此当您import disconfig 时,您会调用该脚本。您应该以不同于模块的方式命名您的脚本。

编辑

之前

disadmin = MDIS.LLE.DIS.DISAdmin_ice.DISAdminPrx.checkedCast()

你应该做的

import MDIS.LLE.DIS.DISAdmin_ice

或者做

from MDIS.LLE.DIS.DISAdmin_ice import DISAdminPrx
DISAdminPrx.checkedCast()

我真的认为我的建议可行,但我无法解释为什么如果有人能用全面的语言解释为什么我相信 OP 会很高兴。在 http://docs.python.org/tutorial/modules.html#packages 中有解释但我不确定这是简单的话。

关于Python导入文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7503275/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com