当你开始进入Python开发的世界,早晚会遇到一个问题:如何把自己写的代码打包分享给其他人?传统方案可能会让你直接面对setuptools的复杂配置,那感觉就像第一次学开车就被扔到了曼哈顿市中心(太恐怖了)!
而Flit就是为了解决这个问题而诞生的开源工具。它的名字就透露了它的理念 - Flatlite,意味着"扁平、轻量"。它让Python包的构建和发布变得出奇地简单,特别适合中小型项目和Python初学者!
在深入了解Flit之前,我们先看看为什么它值得一试:
在我尝试过十几种打包方案后,真的感觉Flit就像是Python打包领域的一股清流!它没有试图变得无所不能,而是专注于做好一件事:让简单的事情保持简单。
安装Flit非常直接,只需要一行命令:
bash pip install flit
如果你想使用它的所有功能(包括生成环境标记的wheel),可以安装完整版:
bash pip install "flit[toml,tomlkit,sdist,api]"
假设我们要创建一个名为awesome_tool的Python包,首先创建这样的目录结构:
awesome_tool/ ├── awesome_tool/ │ ├── __init__.py │ └── core.py └── pyproject.toml
这里的关键是__init__.py文件,它不仅标记这是一个Python包,还将包含我们的元数据。
这是Flit与众不同的地方 - 它从你的主模块文件中提取元数据!在__init__.py中添加:
```python """一个超棒的Python工具,让生活更美好!
这个包提供了一系列实用功能,帮助你更高效地完成任务。 """
version = "0.1.0" ```
注意这里的文档字符串和版本声明 - Flit会用它们作为包的描述和版本号!
接下来,创建项目根目录下的pyproject.toml文件:
```toml [build-system] requires = ["flit_core>=3.2,<4"] build-backend = "flit_core.buildapi"
[project] name = "awesome-tool" authors = [{name = "你的名字", email = "your.email@example.com"}] readme = "README.md" requires-python = ">=3.7" dynamic = ["version", "description"]
[project.urls] Home = "https://github.com/yourusername/awesome-tool" ```
这个文件告诉Python构建系统使用Flit,并提供了一些基本的项目信息。特别注意dynamic = ["version", "description"]这一行 - 它告诉Flit从我们的__init__.py中提取版本和描述!
准备好了吗?只需一条命令:
bash flit build
这将在dist/目录中创建一个可分发的wheel文件和源代码分发包(sdist)。就这么简单!没有复杂的setup.py,没有手动配置MANIFEST.in,Flit全部帮你搞定了。
要本地安装(开发模式):
bash flit install --symlink
这条命令使用符号链接安装你的包,这样你修改代码时不需要重新安装!
准备发布到PyPI?同样简单:
bash flit publish
第一次使用时,Flit会询问你的PyPI认证信息,之后发布过程完全自动化!(当然,你需要先在PyPI上注册账号)
在pyproject.toml中添加项目依赖非常直观:
```toml [project]
dependencies = [ "requests>=2.28.0", "numpy>=1.20.0", "pandas>=1.3.0" ] ```
你还可以定义可选依赖:
toml [project.optional-dependencies] dev = [ "pytest>=7.0.0", "black>=22.3.0", "mypy>=0.942" ]
这样用户可以通过pip install awesome-tool[dev]来安装开发相关的额外依赖。
想让你的包提供命令行工具?在pyproject.toml中添加:
toml [project.scripts] awesome-cli = "awesome_tool.cli:main"
这会创建一个名为awesome-cli的命令,执行时会调用awesome_tool.cli模块中的main函数。超级方便!
有时你可能需要更多控制,比如包含非Python文件。Flit也能优雅处理:
toml [tool.flit.sdist] include = ["docs/*.md", "tests/*.py"] exclude = ["docs/private.md"]
我的经验是:小型项目用Flit(太轻松了!),大型复杂项目可以考虑Poetry或setuptools。
大多数简单项目的迁移过程都出奇地顺利!
虽然我很喜欢Flit,但它并非万能的。在以下情况下,你可能需要考虑其他工具:
Flit代表了Python生态系统的一个重要趋势:让简单的事情保持简单。它没有试图解决所有问题,而是专注于让Python包的创建和分发变得轻松愉快。
对于大多数Python开发者来说,尤其是刚开始创建可分享包的开发者,Flit提供了一个低阻力的入口点。它消除了那些阻碍人们分享代码的技术障碍,让你可以专注于真正重要的事情:编写出色的Python代码!
我强烈建议任何感到传统Python打包工具太复杂的人尝试一下Flit。它可能不会解决所有问题,但它确实使最常见的包构建任务变得出奇地简单。有时候,少即是多!
希望这篇教程能帮助你开始使用Flit,让你的Python包构建之旅变得更加愉快。现在,去创建一些令人惊叹的Python包吧!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。