【问题标题】:Python cannot properly import from another folderPython 无法从另一个文件夹正确导入
【发布时间】:2018-03-31 13:16:28
【问题描述】:

我正在尝试从多个目录设置一个 python 项目以保持其干净。我有一个父文件夹 project,以及两个子目录 project/sub1project/sub2

sub1 文件夹中,有一个名为 Thing.py 的文件,如下所示。里面只有一个类来保存一些变量。我也尝试过没有类,只是文件中的全局变量。两者都会导致相同的问题。

sub2 文件夹中,有一个文件尝试从 Thing.py 导入 class Thing。似乎导入不是问题,但是Thing 导入后没有属性,所以我不能使用它的任何东西。

我尝试查找从其他文件夹导入的内容(使用 sys 模块、sys.path.append(import path)) 以及有关 __init__.py 文件的内容,但我无法使其正常工作。

另外,如果我将文件复制到 sub2 文件夹,它可以正常导入。 print(dir()) 函数调用打印了一些东西,但我什么也没做。帮助将不胜感激。

谢谢。

project/sub1/Thing.py

class Thing:
    a = 1
    b = 2

project/sub2/导入文件

import sys
import tkinter as tk
from tkinter import ttk

sys.path.append(r"..\sub1")
import Thing
print(dir(Thing))

print(dir()) 输出

['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', 
'__name__', '__package__', '__path__', '__spec__']

【问题讨论】:

  • 您正在将相对路径 (..\sub1) 添加到您的 sys.path。您确定要导入正确的Thing.py 吗?尝试print(Thing.__file__) 并仔细检查路径是否正确。
  • 我确定,是的。我什至尝试过绝对路径,它们的行为方式相同。我打印了 Thing.__file__ 并得到了“..\Thing_init_.py”。

标签: python import directory


【解决方案1】:

我已将 init.py 添加到项目目录以及两个子目录中。我使用的是 Mac 机器,所以我的路径不同,您可以在使用 Windows 机器时适当地更改它们(我猜)。 我正在从 sub2 目录运行 importingfile.py 文件 (screenshot here).

【讨论】:

  • 我有你所拥有的,它似乎没有改变任何东西。然而,不知何故我的问题消失了。我只是在搞乱名称和文件,最终正好在我开始的地方,现在它以某种方式工作。我不知道为什么。相同的文件夹结构,相同的名称,相同的文件组成,但现在它正在接班。抱歉耽误了你们的时间。但是,如果您首先知道为什么会发生这种情况,那也很高兴知道。对我来说很奇怪。还有,我应该这样回答还是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多