pgo*_*ssa 4 python python-importlib python-packaging python-poetry
我对 python 不太熟悉,我只用它做过自动化,所以我对包和其他东西都是新手。
\n我正在使用 Flask、Gunicorn 和 Poetry 创建一个 API。
\n我注意到 pyproject.toml 中有一个版本号,我想创建一个路由 /version 来返回我的应用程序的版本。
\n我的应用程序结构如下所示:
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 poetry.lock\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tests\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wsgi.py\n
Run Code Online (Sandbox Code Playgroud)\nwsgi.py
运行应用程序的主文件在哪里。
我看到人们使用 importlib 但我没有找到如何让它工作,因为它与以下命令一起使用:
\n __version__ = importlib.metadata.version("__package__")
\n但我不知道这个包的含义。
sin*_*roc 12
您不应该使用__package__
,它是“导入包”的名称(或者可能是导入模块,具体取决于这行代码所在的位置),而这不是所importlib.metadata.version()
期望的。此函数需要分发包的名称(您pip安装的东西),即您在pyproject.toml
中编写的名称name = "???"
。
因此,如果您要获取其版本字符串的应用程序或库是已命名的Foo
,那么您只需调用以下命令
import importlib.metadata
version_string_of_foo = importlib.metadata.version('Foo')
Run Code Online (Sandbox Code Playgroud)