我构建了我的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中)包含未解析的(上下文)引用有没有办法改善这个项目结构,以摆脱这些警告和错误?
谢谢
__init__.py
和package
文件夹中没有tests
文件;这意味着它不是一个python包。 - 如果你想要他们。context.py
文件中使用导入,所以为了修复它,你需要删除该行。__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__
。