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

时间:2019-03-26 23:55:20

标签: python pycharm

我这样构造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中)包含未解析的(上下文)引用

是否有一种方法可以改善项目结构,以消除那些警告和错误?

谢谢

1 个答案:

答案 0 :(得分: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__