Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从同级目录导入文件_Python_Unit Testing_Import_Python Import_Flask Testing - Fatal编程技术网

Python 从同级目录导入文件

Python 从同级目录导入文件,python,unit-testing,import,python-import,flask-testing,Python,Unit Testing,Import,Python Import,Flask Testing,我需要为我的Flask应用程序运行单元测试。在我的测试配置文件中,我需要从同级目录导入flaskcreate_app函数来初始化测试应用程序。如果没有导入错误,我就无法找到它 我试着把\uuuu init\uuuu.py放在几乎每个文件夹上,但没有成功。我已经了解到,不建议编辑sys路径,因此我希望有一个没有此选项的解决方案 文件夹结构 根目录/ ----__初始值 ----服务器/ --------__初始值 --------database.py ----测验/ --------__初始值

我需要为我的Flask应用程序运行单元测试。在我的测试配置文件中,我需要从同级目录导入flask
create_app
函数来初始化测试应用程序。如果没有导入错误,我就无法找到它

我试着把
\uuuu init\uuuu.py
放在几乎每个文件夹上,但没有成功。我已经了解到,不建议编辑sys路径,因此我希望有一个没有此选项的解决方案

文件夹结构

根目录/
----__初始值
----服务器/
--------__初始值
--------database.py
----测验/
--------__初始值
--------config.py
config.py

from server import create_app
from server.database import db
引发此错误:

回溯(最近一次呼叫最后一次):
文件“tests/config.py”,第2行,在
从服务器导入创建应用程序
ModuleNotFoundError:没有名为“服务器”的模块
以及:

引发此错误:

回溯(最近一次呼叫最后一次):
文件“tests/config.py”,第2行,在
从..服务器导入创建应用程序
ValueError:尝试在顶级包之外进行相对导入

有人能解释一下为什么它不工作,以及python
import
s通常是如何工作的吗?我一直没能弄清楚它们。

要使导入语句正常工作,名称必须在
sys.path
中解析。创建正确的包结构并安装包通常是使名称在
sys.path
中可见的最佳方法

  • 删除
    root/\uuuuu init\uuuuuuy.py
    tests/\uuuuuu init\uuuuuu.py
  • 更正您的导入声明:
  • 来自..服务器导入创建应用程序#否
    从服务器导入创建应用程序#是
    
  • 添加
    root/setup.py
    ,内容如中所述
  • 创建/激活virtualenv(通常在
    root/.venv/
    subdir中,但在何处并不重要)
  • 从项目根目录,即包含
    setup.py
    的目录,安装软件包:
  • pip安装--可编辑。
    
    要使导入语句正常工作,必须以某种方式在
    sys.path
    中解析名称。创建正确的包结构并安装包通常是使名称在
    sys.path
    中可见的最佳方法

  • 删除
    root/\uuuuu init\uuuuuuy.py
    tests/\uuuuuu init\uuuuuu.py
  • 更正您的导入声明:
  • 来自..服务器导入创建应用程序#否
    从服务器导入创建应用程序#是
    
  • 添加
    root/setup.py
    ,内容如中所述
  • 创建/激活virtualenv(通常在
    root/.venv/
    subdir中,但在何处并不重要)
  • 从项目根目录,即包含
    setup.py
    的目录,安装软件包:
  • pip安装--可编辑。
    
    谢谢,但为什么需要安装它?为什么不能像在JS中那样通过导入语句正常导入包呢?因为Python导入系统不是这样工作的。这很公平。谢谢我会尽快接受你的回答。谢谢,但为什么要安装它呢?为什么不能像在JS中那样通过导入语句正常导入包呢?因为Python导入系统不是这样工作的。这很公平。谢谢我会尽快接受你的答复。
    from ..server import create_app
    from ..server.database import db