gpt4 book ai didi

python - 模块导入时出现属性错误 - 在某些计算机上有效

转载 作者:行者123 更新时间:2023-12-05 01:07:34 25 4
gpt4 key购买 nike

我继承了一些我正在尝试运行的 python 脚本。其中包括一些自定义模块,在导入其中一个时出现错误,这似乎是由于其中一个模块自行导入所致。我觉得奇怪的是它可以在一台计算机上运行,​​但不能在另一台计算机上运行。

目录结构如下:

/path/to/packages/python_packages/x
|
/path/to/packages/python_packages/x/mod1.py
/path/to/packages/python_packages/x/mod2.py
/path/to/packages/python_packages/x/mod3.py

我添加(并使用 print(sys.path) 进行交叉检查)路径如下:

sys.path.append("/path/to/packages/python_packages/")

然后我做:

import x.mod1 as mod1
import x.mod2 as mod2
import x.mod3 as mod3

导入 mod1 有效。

导入 mod2 不起作用:

AttributeError: module 'x' has no attribute mod2

Traceback 提示这一行,出现在 mod2.py 中:

import x.mod2 as mod2

导入mod3不起作用,因为它需要导入mod2,它的方法与上面相同。

在 ipython 的回溯中,我可以看到它找到了正确的 python 文件,因为它从文件中打印出代码及其名称、完整路径。

我已尝试删除所有 init.py 和 pycache

我尝试在另一台计算机上运行它,在那里我可以毫无问题地导入模块。

在有问题的计算机上,我有 Python 3.6.8,在 CentOS7 (3.10.0-1160.21.1.el7.x86_64) 上运行,在它工作的计算机上,我有 Python 3.9.2,在Manjaro (5.4.108-1-MANJARO)。

我在有问题的计算机上没有 root 访问权限。

完整的回溯如下(我更改了路径和文件名以与上面的解释保持一致):

In [9]: import x.mod2 as mod2

AttributeError                            Traceback (most recent call last)
<ipython-input-9-8c4b062c2395> in <module>
----> 1 import x.mod2 as mod2

/path/to/packages/python_packages/x/mod2.py in <module>
2 import numpy as np
3
----> 4 import x.mod2 as mod2
5
6

AttributeError: module 'x' has no attribute 'mod2'

最佳答案

没有必要仅仅为了访问mod2.__file__而导入mod2,因为它也可以作为__file__使用。

你应该使用 pathlib:

而不是字符串摆弄
reference_path = Path(__file__).absolute().parents[2] / "reference"

而不是使用 as 使用 from:

from x import mod1

或者,因为您已经在同一个包中:

from . import mod1

关于python - 模块导入时出现属性错误 - 在某些计算机上有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67269094/

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