为了账号安全,请及时绑定邮箱和手机立即绑定

Python 项目结构:“未解析的引用”

Python 项目结构:“未解析的引用”

森林海 2021-12-17 14:38:58
我这样构建了我的 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个赞

  1. __init__.pypackagetests文件夹中没有文件;这意味着它不是 python 包。- 如果你希望他们成为。

  2. 您没有正确使用 import 语句;此外,您没有在context.py文件中使用导入,因此为了修复它,您需要删除该行。

  3. 我建议在这里阅读更多关于包的信息;这将使您更深入地了解应该放入__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__是否确实需要。


查看完整回答
反对 回复 2021-12-17
  • 1 回答
  • 0 关注
  • 5851 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号