我正在尝试使用
pip install
命令提供的信息生成一个 Python 模块。我的项目具有以下结构:
top_repository/
|/setup.py
|/requirements.txt
|/my_proj
|/__init__.py
|/__main__.py
|/_version.py
|/conf.py
setup.py
是:
from setuptools import setup, find_packages
from distutils.util import convert_path
def get_requirements():
with open('requirements.txt') as fp:
return fp.read()
def get_version():
st = {}
version_file = convert_path('my_proj/_version.py')
with open(version_file) as f:
exec(f.read(), st)
return st['_version']
setup(name='my_proj',
version=get_version(),
description='My Proj',
packages=find_packages(),
zip_safe=False)
然后,我用
python setup.py bdist_wheel
创建轮子
我正在寻找一种从 pip 选项获取参数的方法,并在 Wheel 安装期间将参数(例如
--cfg_dir
)添加到 conf.py
文件中。例如,如果我运行:
$ pip install my_proj-0.0.1-py3-none-any.whl --target /usr/alternate/site-packages --cfg_dir /path/to/cfg_dir
Pip/setuptools 将更新
conf.py
为:
CONF_DIR="/path/to/cfg_dir"
我正在使用 Python 3.9.18 和 setuptools 53.0;0
我感谢任何帮助!预先感谢。
此时,我一直在寻找没有任何好的指点。
修改 setup.py 以包含自定义命令 您可以扩展安装命令以包含自定义行为。
从setuptools导入setup,find_packages 从 distutils.util 导入 Convert_path 从 setuptools.command.install 导入安装 导入操作系统
def get_requirements(): 以 open('requirements.txt') 作为 fp: 返回 fp.read()
def get_version(): st = {} version_file = Convert_path('my_proj/_version.py') 将 open(version_file) 作为 f: exec(f.read(), st) 返回 st['_version']
类自定义安装命令(安装): """自定义 setuptools 安装命令 - 使用 CFG_DIR 更新 conf.py。""" def 运行(自我): # 调用标准安装流程 安装.运行(自己)
# Get the CFG_DIR from environment variables
cfg_dir = os.environ.get('CFG_DIR')
if cfg_dir:
conf_file_path = convert_path('my_proj/conf.py')
with open(conf_file_path, 'a') as conf_file:
conf_file.write(f'\nCONF_DIR="{cfg_dir}"\n')
设置( 名称='my_proj', 版本=get_version(), 描述='我的项目', 包=find_packages(), zip_safe=假, cmdclass={ “安装”:自定义安装命令, } )
安装前设置环境变量
安装软件包时,将环境变量 CFG_DIR 设置为所需的配置目录。
export CFG_DIR="/path/to/cfg_dir"
pip install my_proj-0.0.1-py3-none-any.whl --target /usr/alternate/site-packages
CustomInstallCommand:此类扩展了安装命令以包含其他行为。它通过将 CONF_DIR 变量附加到 CFG_DIR 环境变量中指定的路径来修改 conf.py。