<p>pipenv tidak menghormati virtualenv yang diaktifkan saat ini dan membuat env baru</p>

Dibuat pada 2 Nov 2017  ·  3Komentar  ·  Sumber: pypa/pipenv

Tidak terlalu yakin apakah ini perilaku yang diharapkan, tetapi dari perspektif penggunaan, ini tampaknya merupakan bug:

Isu:

pipenv install <package_name> membuat virtualenv baru meskipun virtualenv diaktifkan menggunakan pipenv shell .

Kapan itu terjadi:

jika kita tidak berada di direktori yang sama di mana Pipfile berada.

Deskripsikan lingkunganmu

  1. Jenis OS: Linux (Ubuntu 16.04)
  2. Versi Python: $ python -V == 3.6.3
  3. Versi Pipenv: $ pipenv --version == versi 8.3.1

Hasil yang diharapkan

Jika kita berada dalam shell virtualenv yang diaktifkan, (terlepas dari pwd ) pipenv install harus menghormatinya dan memperbarui Pipfile dan tidak boleh membuat Pipfile .

Hasil sebenarnya

Pipfile baru akan dibuat, meskipun dalam virtualenv yang diaktifkan sama tetapi di direktori yang berbeda.

Langkah-langkah untuk meniru

$ 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

Komentar yang paling membantu

@erinxocon Dan di sinilah letak masalahnya: pengguna berharap pipenv menjadi pengganti pip.

@kennethreitz mengatakannya sendiri di beranda pipenv:

Anda tidak perlu lagi menggunakan pip dan virtualenv secara terpisah. Mereka bekerja sama.

pipenv seharusnya tidak hanya membuat virtualenv, seperti yang Anda katakan, tetapi juga mengelolanya . Sekali lagi, itu disebutkan secara eksplisit di beranda (penekanan milik saya):

Ini secara otomatis membuat dan mengelola virtualenv untuk proyek Anda, serta menambah/menghapus paket dari Pipfile Anda saat Anda menginstal/menghapus paket.

Di masa lalu, ketika kami menggunakan virtualenv dan pip secara terpisah, kami dapat menavigasi ke direktori mana pun dan pip install , dan paket tersebut akan diinstal dengan benar ke dalam virtualenv, fakta bahwa pipenv tidak melakukan itu _ while a pipenv -managed virtualenv diaktifkan_ mematahkan harapan pengguna.

Semua 3 komentar

Hai @ansrivas! Ini bukan aliran pipenv yang dimaksudkan. Pipenv akan menggunakan lingkungan virtual jika ia menemukan dirinya dalam satu pada awalnya tetapi tidak pada semua panggilan berikutnya. Anda akan memiliki sarang virtualenv yang agak berbulu! Jika Anda menavigasi ke folder yang berada di luar proyek, pipenv akan membuat file pip baru. Jika Anda hanya ingin menginstal beberapa paket di luar folder, tetapi di dalam virutalenvironment yang Anda aktifkan di subkulit Anda dapat melakukan pipenv shell dan kemudian pip install requests . Pipenv dapat digunakan untuk membuat virtualenv untuk proyek Anda, tetapi itu sendiri bukan manajer virtualenv, itu adalah manajer proyek.

@erinxocon Dan di sinilah letak masalahnya: pengguna berharap pipenv menjadi pengganti pip.

@kennethreitz mengatakannya sendiri di beranda pipenv:

Anda tidak perlu lagi menggunakan pip dan virtualenv secara terpisah. Mereka bekerja sama.

pipenv seharusnya tidak hanya membuat virtualenv, seperti yang Anda katakan, tetapi juga mengelolanya . Sekali lagi, itu disebutkan secara eksplisit di beranda (penekanan milik saya):

Ini secara otomatis membuat dan mengelola virtualenv untuk proyek Anda, serta menambah/menghapus paket dari Pipfile Anda saat Anda menginstal/menghapus paket.

Di masa lalu, ketika kami menggunakan virtualenv dan pip secara terpisah, kami dapat menavigasi ke direktori mana pun dan pip install , dan paket tersebut akan diinstal dengan benar ke dalam virtualenv, fakta bahwa pipenv tidak melakukan itu _ while a pipenv -managed virtualenv diaktifkan_ mematahkan harapan pengguna.

Saya setuju dengan @ksze dalam hal ini.

Ada harapan bahwa pipenv harus mengelola virtualenv aktif.

Sejalan dengan itu... Saya seharusnya dapat menggunakan -r untuk menginstal Pipfile eksternal atau Pipenv.lock ke virtualenv saat ini, dan tidak membuat yang lain.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat