一、项目结构
# 开发环境,这些目录一般不显示
|-- .git
|-- .idea
|-- .venv
# 项目目录
|-- assets # 附录
|-- bin # 二进制文件
|-- data # 数据
|-- docker # docker文件
|-- docs # 文档
|-- examples # 样例
|-- {project_name} # 项目源码包,注意包命名规范,不能使用 - ,会被认为是减号
|-- include # 引用
|-- libs # 外部资源库
|-- logs # 日志
|-- models # 模型文件
|-- resources # 配置文件
|-- scripts # 脚本
|-- static # 静态资源
|-- templates # 页面
|-- tests # 测试代码
|-- tmp # 临时文件
# 其它文件
|-- requirements.txt
|-- environments.yml
|-- setup.py
|-- .gitignore
|-- ReadMe.md
mkdir assets docker huihu logs scripts tests
mkdir bin docs include models static tmp
mkdir data examples libs resources templates
参考文章 |
---|
Understanding the Structure of a Python Program |
二、包的导入导出
__init__.py
更像是一个 API 门面,你可以通过它对外界暴露最重要的模块,而隐藏包内部的复杂性, 它极大地影响了导入方式的简洁性和对外的模块封装,所以,无论是否在 __init__.py
中显式导入,绝对路径的引用总是可以使用的, 它提供了一种向上浮动的导出机制,允许用户通过更简洁的路径导入包中的模块, 使得可以在包的更高层导入模块,而无需指定完整路径。
那么没必要导出的包,就不要写在__init__.py
中,因为写了的话就会去一层一层执行具体的.py文件代码,这样可能会导致问题,如果涉及到最底层的.py
代码,最好要用完整路径去引用。
在 Python 中,包名不能包含连字符(-),因为连字符在 Python 语法中被认为是减号运算符。如果包名中包含连字符,Python 会将其解释为运算符,导致导入失败或语法错误。
在 setup.py 或 requirements.txt 文件中,你仍然可以使用带连字符的名称来发布或安装包,因为包管理工具(如 pip)允许带有连字符的包名,但在代码中导入时,必须使用下划线。
setup(
name='your-lib', # 分发名称
packages=['your_lib'], # Python 中的包名称(用于导入)
...
)
参考文章 |
---|
Python import: Advanced Techniques and Tips |