46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
# 第 2-8 课完整示例:虚拟环境与依赖管理
|
|
#
|
|
# 本示例只读取当前 Python 解释器和环境信息,不安装、卸载任何依赖。
|
|
|
|
import platform
|
|
import sys
|
|
from importlib.metadata import PackageNotFoundError, version
|
|
from pathlib import Path
|
|
|
|
|
|
def is_virtual_environment() -> bool:
|
|
"""判断当前程序是否运行在普通 venv 虚拟环境中。"""
|
|
# 普通环境中 sys.prefix 和 sys.base_prefix 通常相同。
|
|
# venv 激活并使用其 Python 后,这两个路径通常不同。
|
|
return sys.prefix != sys.base_prefix
|
|
|
|
|
|
def get_package_version(package_name: str) -> str | None:
|
|
"""返回已安装依赖的版本,未安装时返回 None。"""
|
|
try:
|
|
return version(package_name)
|
|
except PackageNotFoundError:
|
|
return None
|
|
|
|
|
|
def get_environment_name() -> str:
|
|
"""返回当前环境目录名称。"""
|
|
return Path(sys.prefix).name
|
|
|
|
|
|
def main() -> None:
|
|
"""输出解释器、虚拟环境和 pip 版本信息。"""
|
|
in_virtual_environment = is_virtual_environment()
|
|
environment_status = "是" if in_virtual_environment else "否"
|
|
pip_version = get_package_version("pip")
|
|
|
|
print(f"Python 版本:{platform.python_version()}")
|
|
print(f"Python 解释器:{sys.executable}")
|
|
print(f"当前环境目录:{get_environment_name()}")
|
|
print(f"是否为 venv 虚拟环境:{environment_status}")
|
|
print(f"pip 版本:{pip_version}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|