手册 __version__
如果您的版本在单独的_version.py
文件中,可以在不加载整个包的情况下导入。
version = '0.0.9.post2+g6481728.d20200518.dirty'
在我的情况下,这是自动生成的,但下一步保持不变。
在
__init__.py
中,您有一行代码
from ._version import version as __version__
然后在
setup.py
中,您可以这样做。这也是我在sphinx的
conf.py
中导入版本的方式。
source_dir = Path("src/<my_package>")
sys.path.insert(0, str(source_dir))
from _version import version
setup(version=version)
...
另外,除了导入_version
文件之外,您还可以尝试手动解析它,这样您就不必将任何内容添加到sys.path
中。
然后在meta.yaml
中进行操作。
{% set data = load_setup_py_data() %}
{% set version = data.get('version') %}
package:
name: <my_package>
version: {{ version }}
我遇到了相反的问题。我忘记定期更新我的版本,所以一直在寻找将
git
仓库作为软件包版本的单一来源的方法。我使用了
setuptools_scm
。
我尝试了很多事情,有些使用了符合pep517标准的
pyproject.toml
,有些没有,但最终这是适合我的方法。
优点是你不需要使用那个庞大的
versioneer.py
,而是在构建时写入到
_version.py
中。
setup.py
from setuptools import setup
import setuptools_scm
def my_local_scheme(version: setuptools_scm.version.ScmVersion) -> str:
"""My local node and date version."""
node_and_date = setuptools_scm.version.get_local_node_and_date(version)
dirty = ".dirty" if version.dirty else ""
return str(node_and_date) + dirty
version = setuptools_scm.get_version(
write_to="src/<my_package>/_version.py",
version_scheme="post-release",
local_scheme=my_local_scheme,
)
setup(version=version,)
在
setup.cfg
中,还有关于
setup()
元数据和选项的其他内容。其中一个必须存在的是:
[options]
package_dir=
=src
packages = <my_package>
install_requires = setuptools_scm
src/<my_package>/_version.py
生成的结果是:
version = '0.0.3.post0+g887e418.d20200518.dirty'
我将其添加到我的.gitignore
文件中。
src/<my_package>/__init__.py
"""<package_description>"""
from ._version import version as __version__
meta.yaml
{% set data = load_setup_py_data() %}
{% set version = data.get('version') %}
package:
name: capacity_simulation
version: {{ version }}
source:
path: .
build:
noarch: python
number: {{ environ.get('GIT_DESCRIBE_NUMBER', 0) }}
script: python -m pip install --no-deps --ignore-installed .
include_recipe: False
requirements:
build:
- setuptools_scm
...
pyproject.toml
为了能够使用 pip wheel .
您需要在 pyproject.toml
中添加此部分内容。
[build-system]
requires = ["setuptools>=34.4", "wheel", "setuptools_scm"]
build-backend = "setuptools.build_meta"
version.py
文件并进行必要的git提交和标签。 - djhoese