当子文件试图访问父文件时为什么会出现导入错误

Why do I get an import error when a child file is trying to access a parent file

我的目录结构如下

>project
 >tests
    >test_to_json.py
 >app.py
 >x.db

在我的 test_to_json.py 中,我想从 app.py

访问 class

我将如何导入它?我试过 from ..app import myClass,但结果是 ImportError: attempted relative import with no known parent package。有什么我想念的吗?

您不能在 python 中使用 .. 相对路径。那种特定类型的亲戚 python 是根本不允许的。但是 . 是允许的。通常通过将您的项目转换为 python 包来解决此问题。

可以找到相关的广泛教程here,但我将举例说明如何将您的项目转换为包。

步骤 1

新的文件结构应该是这样的:

>project
  >tests
    >__init__.py     #Note this file
    >test_to_json.py
  >__init__.py       #Note this file
  >setup.py          #Note this file
  >app.py
  >x.db

第 2 步

写下你的setup.py.
这是适用于您的项目的通用 setup.py

from setuptools import setup, find_packages

setup(
    name='project_package', #the name of your desired import
    version='0.0.1',
    author='An Awesome Coder',
    packages=find_packages(),
    description='An awesome package that does something',
    install_requires=[], # a list of python dependencies for your package
)

find_packages() 查找包中的所有 __init__.py 文件以识别子模块。

步骤 3

安装你的包。在包含新 setup.py、运行 pip install -e . 的文件夹中 这将在您的计算机上安装您的软件包,基本上是将文件添加到您的 python 系统路径。

第 4 步

从您计算机上的任何 python 终端,您现在应该能够使用您指定的 package_name 导入您的包。

import project_package
from project_package.app import myClass

myClass()
.
.
.