Pip: Instalasi dari git repo di direktori lokal gagal jika ditentukan dalam requirements.txt dan path berisi spasi

Dibuat pada 18 Okt 2019  ·  3Komentar  ·  Sumber: pypa/pip

Lingkungan

  • versi pip: 19.3.1
  • Versi Python: 3.7.4
  • OS: Windows 10

Keterangan
Saya dapat menginstal paket dari git repo di direktori lokal seperti:

pip install git+file:///"k/my/path with/lots of/spaces/repo/.git/"

Namun ketika saya memasukkan git+file:///"k/my/path with/lots of/spaces/repo/.git/" ke requirements.txt dan kemudian mencoba menginstal dengan pip install -r requirements.txt gagal dengan ValueError: No closing quotation .

Perilaku yang diharapkan
Diharapkan paket diinstal dari direktori lokal seperti ketika saya menjalankan perintah secara langsung.

Cara Mereproduksi

  1. Tentukan repo git lokal di jalur yang berisi spasi sebagai ketergantungan dalam requirements.txt
  2. Kemudian jalankan pip install -r requirements.txt
  3. Terjadi kesalahan.

Keluaran

pip install -r .\requirements.txt
ERROR: Exception:
Traceback (most recent call last):
  File "C:\Users\username\AppData\Local\Continuum\anaconda3\lib\site-packages\pip\_internal\cli\base_command.py", line 178, in main
    status = self.run(options, args)
  File "C:\Users\username\AppData\Local\Continuum\anaconda3\lib\site-packages\pip\_internal\commands\install.py", line 326, in run
    self.name, wheel_cache
  File "C:\Users\username\AppData\Local\Continuum\anaconda3\lib\site-packages\pip\_internal\cli\base_command.py", line 288, in populate_requirement_set
    use_pep517=options.use_pep517):
  File "C:\Users\username\AppData\Local\Continuum\anaconda3\lib\site-packages\pip\_internal\req\req_file.py", line 112, in parse_requirements
    for req in req_iter:
  File "C:\Users\username\AppData\Local\Continuum\anaconda3\lib\site-packages\pip\_internal\req\req_file.py", line 173, in process_line
    shlex.split(options_str), defaults)  # type: ignore
  File "C:\Users\username\AppData\Local\Continuum\anaconda3\lib\shlex.py", line 305, in split
    return list(lex)
  File "C:\Users\username\AppData\Local\Continuum\anaconda3\lib\shlex.py", line 295, in __next__
    token = self.get_token()
  File "C:\Users\username\AppData\Local\Continuum\anaconda3\lib\shlex.py", line 105, in get_token
    raw = self.read_token()
  File "C:\Users\username\AppData\Local\Continuum\anaconda3\lib\shlex.py", line 187, in read_token
    raise ValueError("No closing quotation")
ValueError: No closing quotation

requirements.txt :

git+file:///"k/my/path with/lots of/spaces/repo/.git/"
pandas
requests
retrying
xlsxwriter

Lihat juga pertanyaan SO terkait .

auto-locked support

Semua 3 komentar

Penanganan kutipan ketika pip dieksekusi secara langsung diatur oleh shell Anda. Di Bash, misalnya, pasangan kutipan yang tidak bersarang dilucuti dan isinya digabungkan dengan apa yang muncul sebelum/sesudah untuk membuat setiap argumen.

File persyaratan, di sisi lain, dibaca apa adanya oleh optparse dan tidak ada penanganan kutipan khusus atau pengupasan yang terjadi.

Yang mengatakan, dalam hal ini ketika mencoba memberikan URL, karakter URL yang tidak valid (seperti spasi) harus dikodekan persen (spasi adalah %20). Lihat skrip ini untuk contoh yang berhasil menginstal git repo yang memiliki spasi di jalur:


repro.sh

#!/bin/sh
cd "$(mktemp -d)"

dir="$PWD/a b c/d e f"
mkdir -p "$dir"
cd "$dir"
cat <<EOF > setup.py
from setuptools import setup

setup(name='example')
EOF

git init
git add .
git commit -m init
cd -


python -V
python -m venv venv
venv/bin/python -m pip install --upgrade pip

cat <<EOF | tee requirements.txt
git+file://$PWD/a%20b%20c/d%20e%20f
EOF

python -m pip install -r requirements.txt


Keluaran

Initialized empty Git repository in /tmp/user/1000/tmp.kITsbsZCPO/a b c/d e f/.git/
[master (root-commit) d347157] init
 1 file changed, 3 insertions(+)
 create mode 100644 setup.py
/tmp/user/1000/tmp.kITsbsZCPO
Python 3.7.2
Collecting pip
  Using cached https://files.pythonhosted.org/packages/00/b6/9cfa56b4081ad13874b0c6f96af8ce16cfbc1cb06bedf8e9164ce5551ec1/pip-19.3.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 18.1
    Uninstalling pip-18.1:
      Successfully uninstalled pip-18.1
Successfully installed pip-19.3.1
git+file:///tmp/user/1000/tmp.kITsbsZCPO/a%20b%20c/d%20e%20f
Collecting git+file:///tmp/user/1000/tmp.kITsbsZCPO/a%20b%20c/d%20e%20f (from -r requirements.txt (line 1))
  Cloning file:///tmp/user/1000/tmp.kITsbsZCPO/a b c/d e f to /tmp/user/1000/pip-req-build-ts2s099_
Requirement already satisfied (use --upgrade to upgrade): example==0.0.0 from git+file:///tmp/user/1000/tmp.kITsbsZCPO/a%20b%20c/d%20e%20f in /home/chris/.pyenv/versions/3.7.2/lib/python3.7/site-packages (from -r requirements.txt (line 1))

Ini berhasil terima kasih banyak!!

Apakah Anda ingin menjawab pertanyaan SO? Kalau tidak, saya akan mengutip penjelasan Anda sebagai jawabannya, jika Anda tidak keberatan.

Saya akan menutup masalah ini, karena penasaran, apakah ini hanya masalah Windows? Karena menurut pengguna 00 di SO, ini berfungsi untuknya tanpa %20 di Mac.

Saya senang itu membantu. :)

Tolong pergilah!

Saya akan sedikit terkejut jika perilakunya khusus untuk platform. Kode di sini seharusnya yang memisahkan URL dan saya tidak melihat apa pun yang akan berubah di seluruh platform. Bagaimanapun, penyandian persen harus bekerja di mana-mana di luar kotak sehingga pasti cara untuk pergi bahkan untuk orang-orang yang mungkin membuatnya bekerja dengan cara lain di platform lain.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat