2 个版本

0.3.2 2020 年 1 月 29 日
0.3.0 2020 年 1 月 25 日

#1230 in 开发工具

MIT/Apache

575KB
6.5K SLoC

Hygeia

Build Status Security Audit Coverage Status

logo

Hygeia 是 Python 解释器管理器,使用 Rust 编写。其目标是允许项目通过 .python-version 文件指定要使用的解释器。

之前项目的名称是 hygeia

Python 打包情况令人痛苦。macOS 随带 Python 2.7,即将达到生命周期的终点。此外,它不包括 pip,即包安装器。pip 只在 Python >= 3.4 中默认包含。

pip安装说明 包含了关于在系统解释器中安装它的严重警告。

可以使用 virtualenv,但它需要安装... 使用 pip,这导致了一个鸡生蛋的问题。

Hygeia 将下载和编译指定的 Python 版本,并允许轻松地在它们之间切换。

该项目从 pyenv 中汲取了许多灵感,后者做了一些类似的事情。pyenv 是用 Bash 编写的,这 阻止了它轻松地在 Windows 上使用。Hygeia 旨在跨 Windows、Linux 和 macOS 移植。

demo

要求

由于 Python 解释器是下载和编译的,因此需要一些构建工具。

macOS / OSX

确保已安装依赖项

  1. Homebrew

    > brew install openssl xz
    
  2. XCode

    > xcode-select --install
    

有关更多信息,请参阅 Python 开发者指南

Linux

待定

Windows

在 Windows 下安装 Python 工具链不需要任何东西(除了 Hygeia 本身);使用预编译的二进制文件。

安装

  1. 访问 发布页面 下载您平台(Linux、macOS、Windows)的最新预编译版本。
  2. 解压缩到临时位置。
  3. 在终端中执行 ./hygeia setup bash。这将
    1. 将自身复制到 $HYGEIA_HOME (${HOME}/.hygeia) 作为 Python 的代理
    2. 创建文件 $HYGEIA_HOME/extra-packages-to-install.txt,包含 待安装的 Python 包列表,当使用 --extra/-e 标志与 installselect 命令时
    3. 设置 ~/.bashrc 以在您的 ${PATH} 前添加 ${HOME}/.hygeia/shims
  4. 您可以删除下载的存档和提取的二进制文件。

编译

就像 cargo build 一样简单!

用法

查看 hygeia --help 了解所有命令

> hygeia --help
hygeia 0.1.4
Nicolas Bigaouette <[email protected]>
Control which Python toolchain to use on a directory basis.

USAGE:
    hygeia [SUBCOMMAND]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    autocomplete    Print to stdout an autocomplete script for the specified shell
    help            Prints this message or the help of the given subcommand(s)
    install         Install version, either from the provided version or from `.python-version`
    list            List installed Python versions
    path            Get path to active interpreter
    run             Run a binary from the installed `.python-version`
    select          Select specified Python versions to use
    setup           Setup the shim
    version         Get version of active interpreter

初始设置

通过安装它(及其代理)到 $HYGEIA_HOME 并配置 bash shell 来设置 Hygeia

> hygeia setup bash

这将

  • hygeia 二进制文件复制到 $HYGEIA_HOME/shims/
  • 使用 Python 二进制名称创建到它的硬链接;
  • $HYGEIA_HOME/hygeia.bash-completion 中创建 bash 完成脚本;
  • 通过 ~/.bashrc$HYGEIA_HOME/shims/ 添加到 ${PATH}
  • ~/.bashrc 中添加一个源代码行 $HYGEIA_HOME/hygeia.bash-completion
  • 创建文件 $HYGEIA_HOME/extra-packages-to-install.txt,包含当使用 --extra/-e 标志与 installselect 命令时安装的 Python 包列表。

列出解释器

> hygeia list
+--------+---------+------------------------------------------------+
| Active | Version | Location                                       |
+--------+---------+------------------------------------------------+
|        |  3.7.1  | /Users/nbigaouette/.hygeia/installed/3.7.1/bin |
+--------+---------+------------------------------------------------+
|        |  3.7.2  | /Users/nbigaouette/.hygeia/installed/3.7.2/bin |
+--------+---------+------------------------------------------------+
|        |  3.5.6  | /Users/nbigaouette/.hygeia/installed/3.5.6/bin |
+--------+---------+------------------------------------------------+
|       |  3.6.8  | /Users/nbigaouette/.hygeia/installed/3.6.8/bin |
+--------+---------+------------------------------------------------+
|        |  3.7.2  | /usr/local/bin                                 |
+--------+---------+------------------------------------------------+
|        | 2.7.15  | /usr/local/bin                                 |
+--------+---------+------------------------------------------------+
|        | 2.7.10  | /usr/bin                                       |
+--------+---------+------------------------------------------------+

如果文件 .python-version 包含一个未安装的版本,则列表会将其报告为活动但不可用

> hygeia list
+--------+---------+------------------------------------------------+
| Active | Version | Location                                       |
+--------+---------+------------------------------------------------+
|       | = 3.6.8 |                 Not installed                  |
+--------+---------+------------------------------------------------+
|        |  3.7.2  | /usr/local/bin                                 |
+--------+---------+------------------------------------------------+
|        | 2.7.15  | /usr/local/bin                                 |
+--------+---------+------------------------------------------------+
|        | 2.7.10  | /usr/bin                                       |
+--------+---------+------------------------------------------------+

获取活动解释器的路径

> hygeia path
/Users/nbigaouette/.hygeia/installed/3.6.8/bin

获取活动解释器的版本

> hygeia version
3.6.8

将解释器设置为活动状态

这将创建(或覆盖)当前工作目录中的文件 .python-version(使用最新的与3.7兼容的语义版本控制版本)。

> hygeia select ~3.7
> hygeia version
3.7.2

注意,可以使用--extraselectinstall命令一起使用,以读取文件$HYGEIA_HOME/extra-packages-to-install.txt,并使用pip install安装所有指定的包。此外,也可以使用--extra-from指定不同的文件。这两个标志可以同时使用,并且将使用两个文件的内容。以#开头的行将被忽略(作为注释)。

解析由Rust的semver crate执行。有关解析的详细信息,请参阅需求部分,在semver crate文档中。

卸载解释器

或者直接删除包含已安装解释器的目录,例如$HYGEIA_HOME/installed/3.5.6(其中$HYGEIA_HOME默认为$HOME/.hygeia)。

使用hygeia list获取解释器列表(及其安装路径)。

注意

日志记录

导出RUST_LOG环境变量以启用hygeia日志级别

> export RUST_LOG=hygeia=debug

有关更多信息,请参阅Rust crates logenv_logger

Python包

可以使用pip(这将调用hygeia的shim)安装Python包。

numpy:

> pip install numpy

许可证

该项目可在以下任一许可证下使用:

任选其一。

行为

应尊重Rust行为准则。对于升级或监管问题,请联系Nicolas([email protected]),而不是Rust监管团队。

依赖关系

~22–38MB
~619K SLoC