手册__version__
如果您在单独的_version.py 中有版本,您可以在不加载整个包的情况下导入。
# coding: utf-8
# file generated by setuptools_scm
# don't change, don't track in version control
version = '0.0.9.post2+g6481728.d20200518.dirty'
在我的情况下,这是自动生成的,但下一步保持不变。
在__init__.py 中有一行from ._version import version as __version__
然后在setup.py 你可以做这样的事情。
这也是我在狮身人面像中导入版本的方式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() 中的其余元数据和选项位于 setup.cfg 中。需要的一个是:
[options]
package_dir=
=src
packages = <my_package>
install_requires = setuptools_scm
src/<my_package>/_version.py
生成:
# coding: utf-8
# file generated by setuptools_scm
# don't change, don't track in version control
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"