Не очень уверен, что это ожидаемое поведение, но с точки зрения использования это кажется ошибкой:
pipenv install <package_name>
создает новый virtualenv, даже если virtualenv активирован с помощью pipenv shell
.
если мы не находимся в том же каталоге, где находится Pipfile
.
$ python -V
== 3.6.3$ pipenv --version
== версия 8.3.1Если мы находимся в активированной оболочке virtualenv, (независимо от pwd
) pipenv install
должен уважать его и правильно обновлять Pipfile
и не должен создавать новый Pipfile
.
Создается новый Pipfile, даже если он находится в том же активированном virtualenv, но в другом каталоге.
$ mkdir -p testproject/app
$ cd testproject/app
$ pipenv install flask
$ pipenv shell # environment gets activated here
$ <my_new_environment>$ cd .. # Now we are inside testproject
$ pipenv install requests
$ New Pipfile gets created here
Привет, @ansrivas! Это не предполагаемый поток pipenv. Pipenv будет использовать виртуальную среду, если она изначально находится в одной, но не во всех последующих вызовах. У вас получится довольно волосатое гнездо виртуальных мастеров! Если вы перейдете к папке за пределами проекта, pipenv создаст новый pipfile. Если вы просто хотите установить некоторые пакеты вне папки, но внутри виртуального окружения, которое вы активировали в подоболочке, вы можете сделать pipenv shell
а затем pip install requests
. Pipenv можно использовать для создания virtualenv для вашего проекта, но он сам по себе не является менеджером virtualenv, это менеджер проекта.
@erinxocon В этом и заключается проблема: пользователи ожидают, что pipenv заменит pip.
@kennethreitz сам сказал это на домашней странице pipenv:
Вам больше не нужно использовать pip и virtualenv отдельно. Они работают вместе.
Предполагается, что pipenv не только создает virtualenv, как вы сказали, но и управляет им. Опять же, это прямо упоминается на домашней странице (выделено мной):
Он автоматически создает и управляет virtualenv для ваших проектов, а также добавляет / удаляет пакеты из вашего Pipfile при установке / удалении пакетов.
Раньше, когда мы использовали virtualenv и pip по отдельности, мы могли перейти в любой каталог и pip install
, и пакет был бы правильно установлен в virtualenv, тот факт, что pipenv этого не делает _ в то время как pipenv -managed virtualenv активирован_ разрушает ожидания пользователей.
Я согласен с @ksze в этом.
Ожидается, что pipenv
должен управлять активным virtualenv.
Аналогичным образом ... Я должен иметь возможность использовать -r
для установки внешнего файла Pipfile или Pipenv.lock в текущий virtualenv, а не создавать другой.
Самый полезный комментарий
@erinxocon В этом и заключается проблема: пользователи ожидают, что pipenv заменит pip.
@kennethreitz сам сказал это на домашней странице pipenv:
Предполагается, что pipenv не только создает virtualenv, как вы сказали, но и управляет им. Опять же, это прямо упоминается на домашней странице (выделено мной):
Раньше, когда мы использовали virtualenv и pip по отдельности, мы могли перейти в любой каталог и
pip install
, и пакет был бы правильно установлен в virtualenv, тот факт, что pipenv этого не делает _ в то время как pipenv -managed virtualenv активирован_ разрушает ожидания пользователей.