Python项目结构:“未解析的参考”

问题描述 投票:2回答:1

我构建了我的python项目:

- project/
+- package/
 +- db/
  +- __init__.py
  +- mydb.py
+- tests/
 +- context.py
 +- mytest.py
+- file.py

project/package/db/__init__.py,我宣布mydb为:

from package.db import mydb

有了这个声明,我可以在mydb中使用file.py函数,使用:

import package.db as db

db.mydb.myfunction()

但是我想在project/tests目录中使用这个函数。所以,我添加了一个project/tests/context.py文件:

import os
import sys

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

import package.db as db

mytest.py

from context import db

db.mydb.myfunction()

它运作良好。

但PyChar说:

  • import package.db as db(在context.py中)是一个未使用的import语句
  • from context import db(在mytest.py中)包含未解析的(上下文)引用

有没有办法改善这个项目结构,以摆脱这些警告和错误?

谢谢

python pycharm
1个回答
1
投票
  1. 您的__init__.pypackage文件夹中没有tests文件;这意味着它不是一个python包。 - 如果你想要他们。
  2. 你没有正确使用import语句;另外,你没有在context.py文件中使用导入,所以为了修复它,你需要删除该行。
  3. 我建议阅读有关包装的more here;这将使您更深入地了解应该放在__init__.py文件中的内容。

需要__init__.py文件才能使Python将目录视为包含包;这样做是为了防止具有通用名称的目录(例如字符串)无意中隐藏稍后在模块搜索路径上发生的有效模块。在最简单的情况下,init.py可以只是一个空文件,但它也可以执行包的初始化代码或设置__all__变量,稍后描述。

我将使用的结构:

- package_name
   - db
     - __init__.py
     - my_db.py
   - tests
     - __init__.py
     - my_test.py
   - __init__.py

您需要添加的唯一代码位于my_db.py文件中:

def my_function():
    return 1

在您的my_test.py文件中,您将拥有:

from package.db import mydb

mydb.my_function()

这就是你所需要的;关于通过__init__.py文件改变进口,如果你真的需要,请查看__all__

© www.soinside.com 2019 - 2024. All rights reserved.