Pipenv本地可编辑模式下Python包版本未更新的问题排查
问题原因
当使用pipenv install -e(开发模式)安装本地包时,pkg_resources读取的是包目录下自动生成的*.egg-info文件夹中的版本元数据,而非实时读取setup.py的内容。这个*.egg-info目录是在第一次执行install -e时生成的,后续修改setup.py的版本号不会自动触发该目录的更新。
而代码改动能实时生效,是因为开发模式下Python会直接链接到本地源码目录,代码文件的修改会在重启解释器后被加载,但版本元数据属于安装时生成的静态信息,不会自动同步。
解决方法
- 重新执行开发版安装命令,强制更新元数据:
pipenv install -e ~/path/to/my_pack - 进入包的根目录,手动更新
*.egg-info目录:cd ~/path/to/my_pack python setup.py egg_info - 优化版本管理方案(更长效的解决办法):
将版本号单独存放在包内的文件(比如my_pack/_version.py),内容示例:
然后在__version__ = "0.0.4"setup.py中导入该版本:
之后查询版本时直接从包的属性获取,无需依赖from my_pack._version import __version__ setup( version=__version__, # 其他配置项... )pkg_resources:pipenv run python >>> import my_pack >>> print(my_pack.__version__) 0.0.4 >>> exit()
内容的提问来源于stack exchange,提问作者Robino
相关产品推荐
相关产品推荐

