Куриная Схема, эквивалентная Python's virtualenv?

Есть ли способ создать эквивалент виртуальной среды Python (virtualenv)? С помощью virtualenvs можно устанавливать пакеты Python в виртуальной среде (отдельном каталоге), не портя глобальную среду Python. Можно удалить пакеты, которые, по их мнению, им не нужны, не беспокоясь об удалении пакета, от которого зависит другой проект Python. Я уверен, что есть и другие преимущества, о которых я сейчас не думаю. Я замечаю, что когда я использую программу по установке цыплят, она устанавливает все яйца в моем /usr/local/Cellar/chicken/4.12.0/lib/chicken/8/ реж. Есть ли способ заставить их установить это яйцо в директорию проекта, аналогично тому, как работает Python virtualenv?

2 ответа

На самом деле в CHICKEN 4 такого нет. Проблема в том, что установка яиц в другое место - это одна часть, другая - запуск программ, которые ищут яйца в этом месте. Вы можете подражать этому, используя что-то вроде этого:

export LOCAL_EGGS=/path/to/project/local
chicken-install -init $LOCAL_EGGS
export CHICKEN_REPOSITORY=$LOCAL_EGGS
chicken-install r7rs ...
csc ...

Самый простой способ сделать это - просто установить CHICKEN в другое место, используя PREFIX возможность make при его создании (см. README для инструкций). Это позволяет вам создать курицу, специально созданную для каждого из ваших проектов. Я предпочитаю эту опцию другим, потому что она очень проста для понимания, а сам CHICKEN очень быстро строится и не очень большой, поэтому я считаю, что затраты на это вполне приемлемы.

В качестве альтернативы, используйте предложенное Васамасой или используйте -deploy Возможность установки яиц с помощью программы. См. Главу развертывания в руководстве для получения дополнительной информации.

На самом деле вам не нужна "виртуальная среда" - все уже на месте.

Есть простой способ изменить расположение репозитория:

CHICKEN_INSTALL_REPOSITORY это место, где будут установлены яйца и какие инструменты, связанные с яйцами, как chicken-install, chicken-uninstall а также chicken-statusпроконсультируйтесь и обновите. Убедитесь, что пути, указанные в этих переменных среды, являются абсолютными, а не относительными.

а также

CHICKEN_REPOSITORY_PATH это каталог (или список каталогов, разделенных :/;), откуда должны загружаться яйца для всех программ для курицы.

Точка CHICKEN_INSTALL_REPOSITORYв то место, где вы хотите. Обратите внимание, что вам нужно указатьCHICKEN_REPOSITORY_PATH в ваш локальный репозиторий, а также в системный, чтобы иметь возможность импортировать расширения, распространяемые с системой Chicken.

Также вам, скорее всего, потребуется настроить префикс установки:

Альтернативный префикс установки, который будет добавлен к путям установки расширений, если он указан. Он установлен-prefix параметр или переменная среды CHICKEN_INSTALL_PREFIX.

и обнови свой PATH:

PATH="$CHICKEN_INSTALL_PREFIX/bin:$PATH"

Это позволяет вам устанавливать расширения, которые предоставляют консольные программы.

Единственное, что осталось сделать, это export все эти переменные.

Это оно!

Это в основном то, что Python virtualenv activateскрипт делает по сути. Как видите, это очень простые шаги. Для этого не нужен специальный инструмент. Очень хорошо подойдет очень простой сценарий оболочки.

Как это работает?

Это работает путем введения еще одной локальной иерархии уровня глубины (как и для/usr а также /usr/local, пожалуйста, смотрите FHS). Если вам интересно, что такое, черт возьми, локальная иерархия, взгляните на свой$HOME/.local - Возможно, у вас внутри есть что-то интересное.

Бонус

Поскольку настройка репозитория расширений для каждого проекта включает только изменение среды, это определенно можно автоматизировать. Есть очень удобный инструмент для решения таких задач в целом: direnv. Используя эту простую функцию в вашем$HOME/.envrc:

use_chicken() {
    LOCAL=$(expand_path .local)

    system_repository=$(chicken-install -repository)
    binary_version=${system_repository##*/}

    local_repository=${LOCAL}/lib/chicken/${binary_version}

    path_add CHICKEN_REPOSITORY_PATH ${system_repository}
    path_add CHICKEN_REPOSITORY_PATH ${local_repository}

    export CHICKEN_REPOSITORY_PATH
    export CHICKEN_INSTALL_REPOSITORY=${local_repository}
    export CHICKEN_INSTALL_PREFIX=${LOCAL}

    PATH_add ${LOCAL}/bin
}

вы можете настроить свой проект Chicken с помощью этих двух строк в .envrc внутри каталога проекта:

source_up
use chicken

Я знаю, что существует https://github.com/ursetto/cenv (сам никогда не использовал), но он предназначен только для ЦЫПЛЕНОК 5 (он не будет работать с ЦЫПЛЕНОМ 4). Подумал об упоминании об этом, если вы планируете перейти на CHICKEN 5.

Другие вопросы по тегам