我这样构建了我的 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 dbdb.mydb.myfunction()但我也想在project/tests目录中使用这个功能。所以,我添加了一个project/tests/context.py文件:import osimport syssys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))import package.db as db并在mytest.py:from context import dbdb.mydb.myfunction()它运作良好。但 PyChar 说:import package.db as db (在 context.py 中)是未使用的导入语句from context import db (在 mytest.py 中)包含未解析的(上下文)引用有没有办法改进这个项目结构以摆脱那些警告和错误?
1 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
您
__init__.py的package和tests文件夹中没有文件;这意味着它不是 python 包。- 如果你希望他们成为。您没有正确使用 import 语句;此外,您没有在
context.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__是否确实需要。
添加回答
举报
0/150
提交
取消
