我这样构造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中)包含未解析的(上下文)引用是否有一种方法可以改善项目结构,以消除那些警告和错误?
谢谢
答案 0 :(得分:1)
您的__init__.py
和package
文件夹中没有tests
文件;表示它不是python包。 -如果您希望他们成为。
您没有正确使用import语句;另外,您没有在context.py
文件中使用导入,因此,要修复它,您需要删除该行。
我建议阅读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__
。