Установите пакет и напишите в файл требований .txt с пипсом
Я ищу способ установить пакет с помощью pip и записать эту информацию о версии пакета в файл project.txt проекта. Для тех, кто знаком с npm, это то, что делает npm install --save
.
Использование pip freeze > requirements.txt
отлично работает, но я обнаружил, что забыл запустить это или случайно включил неиспользуемые пакеты, которые я установил для тестирования, но решил не использовать.
Итак, следующий psuedocode:
$ pip install nose2 --save
Появится файл requirements.txt с:
nose2==0.4.7
Я предполагаю, что могу выполнить вывод save, чтобы захватить номера версий, но я надеюсь, что есть более простой способ.
Ответы
Ответ 1
Чтобы получить информацию о версии, вы можете использовать выборочную блокировку выборочно после установки. Вот функция, которая должна делать то, о чем вы просите:
pip_install_save() {
package_name=$1
requirements_file=$2
if [[ -z $requirements_file ]]
then
requirements_file='./requirements.txt'
fi
pip install $package_name && pip freeze | grep -i $package_name >> $requirements_file
}
Обратите внимание на -i на команду grep. Пип не чувствителен к регистру с именами пакетов, поэтому вы, вероятно, захотите этого.
Ответ 2
Просто добавьте smth, как
function pips() {
echo $'\n'$1 >> requirements.txt; pip install $1
}
в ваш .bashrc или .bash_profile и используйте команду pips для установки пакета и сохранения его имени в файле требований. txt
Пример:
pips django-waffle
на основе комментария Akash Kothawale:)
Ответ 3
Я написал следующую функцию bash, которую я использую:
function pip-save() {
for pkg in [email protected]; do
pip install "$pkg" && {
name="$(pip show "$pkg" | grep Name: | awk '{print $2}')";
version="$(pip show "$pkg" | grep Version: | awk '{print $2}')";
echo "${name}==${version}" >> requirements.txt;
}
done
}
Это сохраняет имя канонического пакета для требований, а также версию, установленную. Пример использования;
$ pip-save channels asgi_redis
# will save the following to requirements.txt (as of writing):
# ---
# channels==1.0.1
# asgi-redis==1.0.0
# ---
# note how asgi_redis is translated to its canonical name `asgi-redis`