获取 python3 给定源目录的包元数据而不安装
Get python3 package metadata given source directory without installing
我正在尝试获取一些包元数据(名称、版本),给定源目录路径而不安装所述包。
这些有效,如果您位于根目录中,则使用 setup.py
:
> python3 setup.py --name
my_package_name
> python3 setup.py --version
0.1.0
但是,我被警告不要使用 python3 setup.py
命令——并且确实看到了警告:
.../lib/python3.7/site-packages/setuptools/installer.py:30: SetuptoolsDeprecationWarning: setuptools.installer is deprecated. Requirements should be satisfied by a PEP 517 installer.
SetuptoolsDeprecationWarning,
我知道 pip show my_package_name
将打印有关包的各种元数据(包括 name/version),但是它需要将包安装到环境中。它也不采用源目录,因此需要我已经知道我想要的信息包的名称。
> pip show .
WARNING: Package(s) not found: .
> pip show my_package_name
WARNING: Package(s) not found: my_package_name
> pip install .
...
> pip show my_package_name
Name: my_package_name
Version: 0.1.0
...
...
是否有任何等效的 pip
命令(或其他工具)可以在不实际安装包的情况下向我显示给定源目录的包版本?
提前致谢!
它不像 setup.py 调用那么紧凑,但您可以使用 pep517
包。
python -m pep517.meta my-package
将创建一个 my-package/dist/my_package.dist-info/METADATA 文件,您可以在其中阅读所有可用信息。
pip
供应商提供此 PyPA 库,因此 python -m pip._vendor.pep517.meta my-package
无需额外安装即可工作。
警告
这仅在 PEP-517 构建后端实现了 prepare_metadata_for_build_wheel
挂钩时才有效,根据 https://peps.python.org/pep-0517/#prepare-metadata-for-build-wheel
这是可选的
让我们看看是否有人想出更好的工具。
如果您曾经 运行 在一个使用缺少 setup.py 文件的 setuptools.build_meta 后端的纯 PEP-517 项目上,您仍然可以创建一个“空”项目(使用以下内容)
from setuptools import setup
setup()
并继续使用 python setup.py
说明。
但这不适用于其他 PEP-517 构建后端,如 poetry 或 flit。
您可以将 pip -v install
与 --global-option="--version"
. According to the docs 一起使用,这将按以下方式翻译:
python -m pip -v install --global-option="--version" path/to/project
相当于
python setup.py --version install
后一个命令只运行 --version
部分然后退出,从而忽略 install
部分。由于相应的子进程成功终止,pip
将报告它已经安装了包,而实际上并没有。无论如何,从底部开始的第三行将包含 setup.py
调用的输出,即版本号:
Processing ./path/to/project
Running command python setup.py egg_info
running egg_info
[...]
Preparing metadata (setup.py) ... done
Skipping wheel build for testpkg, due to binaries being disabled for it.
Installing collected packages: testpkg
Running command Running setup.py install for testpkg
1.2
Running setup.py install for testpkg ... done
Successfully installed testpkg
注意: 这可能是一个 hacky 解决方案,因为它依赖于 pip -v install
的打印输出,这可能会在未来的版本中发生变化。无论如何,它适用于当前版本的 pip (22.0.4)。
我正在尝试获取一些包元数据(名称、版本),给定源目录路径而不安装所述包。
这些有效,如果您位于根目录中,则使用 setup.py
:
> python3 setup.py --name
my_package_name
> python3 setup.py --version
0.1.0
但是,我被警告不要使用 python3 setup.py
命令——并且确实看到了警告:
.../lib/python3.7/site-packages/setuptools/installer.py:30: SetuptoolsDeprecationWarning: setuptools.installer is deprecated. Requirements should be satisfied by a PEP 517 installer.
SetuptoolsDeprecationWarning,
我知道 pip show my_package_name
将打印有关包的各种元数据(包括 name/version),但是它需要将包安装到环境中。它也不采用源目录,因此需要我已经知道我想要的信息包的名称。
> pip show .
WARNING: Package(s) not found: .
> pip show my_package_name
WARNING: Package(s) not found: my_package_name
> pip install .
...
> pip show my_package_name
Name: my_package_name
Version: 0.1.0
...
...
是否有任何等效的 pip
命令(或其他工具)可以在不实际安装包的情况下向我显示给定源目录的包版本?
提前致谢!
它不像 setup.py 调用那么紧凑,但您可以使用 pep517
包。
python -m pep517.meta my-package
将创建一个 my-package/dist/my_package.dist-info/METADATA 文件,您可以在其中阅读所有可用信息。
pip
供应商提供此 PyPA 库,因此 python -m pip._vendor.pep517.meta my-package
无需额外安装即可工作。
警告
这仅在 PEP-517 构建后端实现了 prepare_metadata_for_build_wheel
挂钩时才有效,根据 https://peps.python.org/pep-0517/#prepare-metadata-for-build-wheel
让我们看看是否有人想出更好的工具。
如果您曾经 运行 在一个使用缺少 setup.py 文件的 setuptools.build_meta 后端的纯 PEP-517 项目上,您仍然可以创建一个“空”项目(使用以下内容)
from setuptools import setup
setup()
并继续使用 python setup.py
说明。
但这不适用于其他 PEP-517 构建后端,如 poetry 或 flit。
您可以将 pip -v install
与 --global-option="--version"
. According to the docs 一起使用,这将按以下方式翻译:
python -m pip -v install --global-option="--version" path/to/project
相当于
python setup.py --version install
后一个命令只运行 --version
部分然后退出,从而忽略 install
部分。由于相应的子进程成功终止,pip
将报告它已经安装了包,而实际上并没有。无论如何,从底部开始的第三行将包含 setup.py
调用的输出,即版本号:
Processing ./path/to/project
Running command python setup.py egg_info
running egg_info
[...]
Preparing metadata (setup.py) ... done
Skipping wheel build for testpkg, due to binaries being disabled for it.
Installing collected packages: testpkg
Running command Running setup.py install for testpkg
1.2
Running setup.py install for testpkg ... done
Successfully installed testpkg
注意: 这可能是一个 hacky 解决方案,因为它依赖于 pip -v install
的打印输出,这可能会在未来的版本中发生变化。无论如何,它适用于当前版本的 pip (22.0.4)。