You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python包迁移至pyproject.toml打包时,如何正确包含.env文件?

解决Python包打包时包含.env文件的问题

能不能直接把.env文件纳入包分发?

不建议直接将.env文件放进分发包。.env文件通常存储敏感配置(如密钥、数据库地址)或环境特定参数,每个用户的配置需求大概率不同,打包自带的.env会让用户拿到你的默认/测试配置,既不安全也不实用。

用pyproject.toml打包时包含配置模板的正确方式

如果是想给用户提供一个.env模板(比如.env.example),让用户复制后自行修改,可以通过setuptools的两种配置方式实现:

方法1:使用package_data(推荐,文件与包代码绑定)

假设你的包结构如下:

my_package/
├── __init__.py
├── config.py
└── .env.example

在pyproject.toml中添加以下配置:

[project]
name = "my_package"
# 其他项目基础配置...

[tool.setuptools.package-data]
my_package = [".env.example"]

打包后,.env.example会被放入安装后的包目录中,用户可复制该文件并重命名为.env,再修改成自己的配置。

方法2:使用data_files(文件放到系统特定位置)

如果希望把模板放到用户的系统配置目录(如~/.config/my_package/),可以配置:

[tool.setuptools.data_files]
".config/my_package" = [".env.example"]

这种方式的路径会因操作系统而异,灵活性不如package_data。

更合理的替代方案:引导用户自行创建.env文件

在包的文档(如README)中明确告知用户创建流程,并列出必填配置项:

  1. 在项目根目录(或包安装后的配置目录)创建.env文件
  2. 添加所需配置项,示例:
    API_KEY=your_api_key_here
    DB_URL=postgres://user:pass@localhost/db
    
  3. 包会自动从该文件加载配置

同时在你的Config类中添加默认值降级逻辑,避免用户未配置时程序报错:

from dotenv import load_dotenv
import os

class Config:
    def __init__(self):
        load_dotenv()
        # 提供非敏感的默认值作为降级方案
        self.API_KEY = os.getenv("API_KEY", "demo_key_for_test")
        self.DB_URL = os.getenv("DB_URL", "sqlite:///local_default.db")

打包验证

打包完成后,通过pip install dist/your_package-*.whl安装包,再用pip show my_package查看安装路径,进入对应目录检查模板文件是否已被正确包含。

内容的提问来源于stack exchange,提问作者ewawoowa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:49:52