conda create --name environmentName python = 3 pandas numpy
.
Включите сразу все ваши зависимости при создании среды.
, источник активируйте environmentName
. python fileName.py
.
Вам не нужно указывать версию python, потому что сценарий выполняется в среде Anaconda. Используемая версия будет той, что указана в среде (для скрипта требуется python3, который уже был указан в среде Anaconda). Кроме опции -i
, которая стирает всю среду, POSIX env
не предоставляет никакого способа сбросить значение переменной.
Тем не менее, с несколькими реализациями env
(включая, по крайней мере, GNU, busybox
' и FreeBSD), вы можете сделать:
env -u ENV_VAR command
Что будет работать при удалении каждого экземпляра Переменная ENV_VAR
из среды (обратите внимание, что она не работает для переменной среды с пустым именем ( env -u ''
либо выдает ошибку, либо неэффективна в зависимости от реализация, хотя все принимают env '=value'
, вероятно, ограничение, вызванное функцией unsetenv()
C, которая требует POSIX для возврата ошибки для пустой строки, хотя такого нет. ограничение для putenv()
)).
Переносимо (в оболочках POSIX) вы можете сделать:
(unset -v ENV_VAR; exec command)
(обратите внимание, что в некоторых оболочках использование exec
может изменить выполняемую команду
: запускает команду в filesystem вместо функции или встроенной функции, например (и, очевидно, обойдёт расширение alias
), например env
выше. В таких случаях вы захотите опустить его).
Но это не будет работать для переменных среды, имя которых не может быть сопоставлено с переменной оболочки (обратите внимание, что некоторые оболочки, такие как mksh
, в любом случае удалят эти переменные из среды при запуске) или переменные, помеченные как доступные только для чтения.
-v
для оболочки Bourne и bash
, чей unset
без -v
может сбросить функцию ENV_VAR
, если не было переменнойс таким именем. Большинство других оболочек не отключат функции, если вы не передадите параметр -f
.(на практике маловероятно).
(Также остерегайтесь ошибки/неправильной функции bash
/ mksh
/ yash
, чей unset
, при некоторых обстоятельствах может не сбрасываться переменная, но раскрывает переменную во внешней области видимости )
Если доступен perl
, вы можете сделать:
perl -e 'delete $ENV{shift@ARGV}; exec @ARGV or die$!' ENV_VAR command
Что будет работать даже для переменной среды с пустым название.
Теперь все это не будет работать, если вы хотите изменить переменную окружения для встроенной функции или функции и не хотите, чтобы они запускались в подоболочке, как в bash
:
env -u LANG printf -v var %.3f 1.2 # would run /usr/bin/printf instead
(unset -v LANG; printf -v var %.3f 1.2) # changes to $var lost afterwards
(здесь сбрасывать LANG как ошибочный подход, чтобы убедиться, что .
используется и понимается как десятичный разделитель. Для этого было бы лучше использовать LC_ALL=C printf...
)
В некоторых оболочках вы можете вместо этого создать локальную область для переменной с помощью функции:
without() {
local "$1" # $1 variable declared as initially unset in bash¹
shift
"$@"
}
without LANG printf -v var %.3f 1.2
С zsh
вы также можете использовать анонимную функцию:
(){local ENV_VAR; command}
Этот подход не будет работать в некоторых оболочках. (например, основанные на оболочке Almquist), чьи локальные
не объявляют переменную как изначально не установленную (но наследуют значение и атрибуты). В них вы можете сделать local ENV_VAR; unset ENV_VAR
, но не делайте этого в mksh
или yash
(typeset
вместо local
для этого), как это не сработает, unset
будет только отменять local
.
¹ Также имейте в виду, что в bash
локальный ENV_VAR
(даже если он не установлен) сохранит атрибут export. Таким образом, если бы command
была функцией, которая присваивает значение ENV_VAR
, переменная была бы доступна в среде команд, вызываемых впоследствии. unset ENV_VAR
очистит этот атрибут. Или вы можете использовать local +x ENV_VAR
, что также обеспечит чистый лист (если эта переменная не была объявлена доступной только для чтения, но тогда вы ничего не можете с этим поделать в bash
).
Насколько мне известно, прямого эквивалента нет; вы можете использовать подоболочку:
(unset ENV_VAR; exec command)
Вы можете использоватьENV_VAR= command
На самом деле это не отменяет установку переменной, но может быть полезно во многих случаях. (Сценарии оболочки обычно просто используют test -n
для проверки того, установлена ли переменная):
$ export ENV_VAR=foo
$ mycommand
ENV_VAR: foo
$ ENV_VAR=bar mycommand
ENV_VAR: bar
$ ENV_VAR= mycommand
ENV_VAR: