我如何setup.py从我的包中获得定义的版本(用于--version或其他目的)?
使用distutils,setuptools等,包版本指定在setup.py:
# file: setup.py
...
setup(
name='foobar',
version='1.0.0',
# other attributes
)
Run Code Online (Sandbox Code Playgroud)
我希望能够从包中访问相同的版本号:
>>> import foobar
>>> foobar.__version__
'1.0.0'
Run Code Online (Sandbox Code Playgroud)
我可以添加__version__ = '1.0.0'到我的包的__init__.py,但我还想在我的包中包含其他导入以创建包的简化接口:
# file: __init__.py
from foobar import foo
from foobar.bar import Bar
__version__ = '1.0.0'
Run Code Online (Sandbox Code Playgroud)
和
# file: setup.py
from foobar import __version__
...
setup(
name='foobar',
version=__version__,
# other attributes
)
Run Code Online (Sandbox Code Playgroud)
但是,foobar如果导入其他尚未安装的软件包,这些额外的导入可能会导致安装失败.使用setup.py和软件包共享软件包版本的正确方法是什么?
情况:
我有一个python库,由git控制,并与distutils/setuptools捆绑在一起.我想基于git标签自动生成版本号,包括for setup.py sdist和alike命令,以及库本身.
对于我可以使用的第一个任务git describe或类似的解决方案(请参阅 如何在我的包中的setup.py(setuptools)中定义版本?).
例如,当我在标签'0.1'并且要求'setup.py sdist'时,我得到'mylib-0.1.tar.gz'; 或'mylib-0.1-3-abcd.tar.gz'如果我在标记后更改了代码.这可以.
问题是:
当我想让这个版本号可用于库本身时,问题出现了,所以它可以将它作为'mylib/0.1-3-adcd'发送到User-Agent HTTP头中.
如果我添加setup.py version命令,如何在我的包中获得setup.py(setuptools)中定义的版本?,然后在制作标签后生成此version.py,因为它使用标记作为值.但是在这种情况下,我需要在制作版本标记之后再进行一次提交,以使代码保持一致.反过来,这需要一个新标签进行进一步捆绑.
问题是:
如何打破这个依赖圈(generate-commit-tag-generate-commit-tag -...)?
在argparse中指定程序名称和版本信息的首选方法是什么?
__version_info__ = ('2013','03','14')
__version__ = '-'.join(__version_info__)
...
parser.add_argument('-V', '--version', action='version', version="%(prog)s ("+__version__+")")
我正在开发一个Django应用程序,我想显示应用程序的版本(这样一来,发现错误的人知道应用程序的版本并可以提供更好的错误报告).
是否有一种普遍接受的方式来存储Django中的版本号(我的意思是我的应用程序的版本,而不是Django)?
我正在尝试将我的包从 迁移setup.py到pyproject.toml,但我不确定如何以与以前相同的方式进行动态版本控制。目前,当构建用于开发时,我可以使用环境变量传递开发版本。
该文件setup.py看起来类似于:
import os
from setuptools import setup
import my_package
if __name__ == "__main__":
dev_version = os.environ.get("DEV_VERSION")
version = dev_version if dev_version else f"{my_package.__version__}"
setup(
name="my_package",
version=version,
...
)
Run Code Online (Sandbox Code Playgroud)
使用文件时有没有办法做类似的事情pyproject.toml?
我正在尝试在我使用Click库在Python中构建的CLI应用程序上运行PyInstaller .我在使用PyInstaller构建项目时遇到了麻烦.PyInstaller在他们的GitHub wiki中有一个名为Recipe Setuptools Entry Point的文档,该文档提供了有关如何将PyInstaller与setuptools包一起使用的信息,我正在为此项目使用它.但是,它似乎在我运行时找不到基本模块pyinstaller --onefile main.spec.
我的问题是:问题只是我的文件夹结构的问题吗?Recipe Setuptools入口点是否采用某种文件结构?
相关信息
Pyinstaller输出
184 INFO: PyInstaller: 3.3.1
184 INFO: Python: 3.6.4
189 INFO: Platform: Darwin-16.7.0-x86_64-i386-64bit
193 INFO: UPX is available.
Traceback (most recent call last):
File "/usr/local/bin/pyinstaller", line 11, in <module>
sys.exit(run())
File "/usr/local/lib/python3.6/site-packages/PyInstaller/__main__.py", line 94, in run
run_build(pyi_config, spec_file, **vars(args))
File "/usr/local/lib/python3.6/site-packages/PyInstaller/__main__.py", line 46, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "/usr/local/lib/python3.6/site-packages/PyInstaller/building/build_main.py", line 791, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File …Run Code Online (Sandbox Code Playgroud) 我已经在我的机器上安装了Seaborn.Seaborn工作正常.我需要找到安装Seaborn的版本.我用什么命令来查找Seaborn的版本?
我正在编写一个 Python 程序(用于 Linux 环境),我希望它支持该程序的版本实现。我在某处读到我应该添加一行“__ Version __”,但我不太确定在哪里以及如何放置它。我想要实现的目标是不必每次要安装新版本时都删除整个程序。谢谢!
我正在写一个Python包.程序包需要在内部知道其版本号,同时在setup.py脚本中也包含此版本distutils.
这样做的最佳方法是什么,因此版本号不需要在两个不同的位置维护?我不想setup.py从我的库的其余部分导入脚本(这看起来相当愚蠢),我不想从setup.py脚本中导入我的库(同样).理想情况下,我只是设置一个关键字,svn并自动将其替换为文件,但似乎不可能svn.我可以在两个地方读取包含版本号的常见文本文件 - 这是最好的解决方案吗?
澄清一下:我想在一个地方保留版本号.是的,我可以在包中添加一个变量,然后再在setup.py文件中.但是他们不可避免地会失去同步.
目前我的Java项目,通过将其声明为Maven项目,我可以完全控制版本.但是我现在有一个我要标记的Python项目0.2.0没有版本控制.因此,我是否应该在以后的日程中使用此代码,我不会知道它是什么版本.
如何将版本控制添加到Python项目,就像Maven为Java做的那样?
什么是/是否有一种首选方式来公开模块版本号?
Python本身使用builtins元组sys.version_info:
>>> sys.version_info
sys.version_info(major=3, minor=3, micro=0, releaselevel='final', serial=0)
Run Code Online (Sandbox Code Playgroud)MySQLdb(例如)使用普通元组:
>>> MySQLdb.version_info
(1, 2, 3, 'final', 0)
Run Code Online (Sandbox Code Playgroud)某些第三方库使用该字符串 __version__
>>> requests.__version__
'1.2.3'
Run Code Online (Sandbox Code Playgroud)一些框架使用元组VERSION:
>>> django.VERSION
(1, 6, 0, 'alpha', 0)
Run Code Online (Sandbox Code Playgroud)......显然,在这件事上有很多不同的用法!
python ×12
setuptools ×5
version ×4
distutils ×3
git ×2
argparse ×1
django ×1
pandas ×1
pyinstaller ×1
python-3.x ×1
python-click ×1
seaborn ×1
svn ×1