Π‘ΡΠ΅Π΄Π°
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
Π― ΠΌΠΎΠ³Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ git Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²ΠΎΠΉ:
pip install git+file:///"k/my/path with/lots of/spaces/repo/.git/"
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΏΠΎΠΌΠ΅ΡΠ°Ρ git+file:///"k/my/path with/lots of/spaces/repo/.git/"
Π² ΡΠ²ΠΎΠΉ requirements.txt
Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΡΠ°ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ pip install -r requirements.txt
ΠΎΠ½ ΡΠ΅ΡΠΏΠΈΡ Π½Π΅ΡΠ΄Π°ΡΡ Ρ ValueError: No closing quotation
.
ΠΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΠΆΠΈΠ΄Π°Π»ΠΎΡΡ, ΡΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΈΠ· Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΊΠΎΠ³Π΄Π° Ρ Π·Π°ΠΏΡΡΠΊΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π°ΠΏΡΡΠΌΡΡ.
ΠΠ°ΠΊ ΡΠ°Π·ΠΌΠ½ΠΎΠΆΠ°ΡΡΡΡ
requirements.txt
pip install -r requirements.txt
ΠΡΡ ΠΎΠ΄
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
Π‘ΠΌ. Π’Π°ΠΊΠΆΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π²ΠΎΠΏΡΠΎΡ SO .
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠ°Π²ΡΡΠ΅ΠΊ ΠΏΡΠΈ ΠΏΡΡΠΌΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ pip ΡΠ΅Π³ΡΠ»ΠΈΡΡΠ΅ΡΡΡ Π²Π°ΡΠ΅ΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΎΠΉ. Π Bash, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΏΠ°ΡΡ ΠΊΠ°Π²ΡΡΠ΅ΠΊ ΡΠ΄Π°Π»ΡΡΡΡΡ, Π° ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅ΡΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΈΠ΄Π΅Ρ Π΄ΠΎ / ΠΏΠΎΡΠ»Π΅, Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°.
Π€Π°ΠΉΠ»Ρ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠΈΡΠ°ΡΡΡΡ optparse ΠΊΠ°ΠΊ Π΅ΡΡΡ, ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΊΠ°Π²ΡΡΠ΅ΠΊ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ URL-Π°Π΄ΡΠ΅Ρ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ URL-Π°Π΄ΡΠ΅ΡΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠ±Π΅Π») Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Ρ Π² ΠΏΡΠΎΡΠ΅Π½ΡΠ°Ρ (ΠΏΡΠΎΠ±Π΅Π» ΡΠ°Π²Π΅Π½% 20). Π‘ΠΌ. ΠΡΠΎΡ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ git Ρ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ Π² ΠΏΡΡΠΈ:
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
ΠΡΡ
ΠΎΠ΄
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))
ΠΡΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π²Π°ΠΌ Π±ΠΎΠ»ΡΡΠΎΠ΅ !!
ΠΡ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° Π²ΠΎΠΏΡΠΎΡ Π’ΠΠ? Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ ΠΏΡΠΎΡΠΈΡΠΈΡΡΡ Π²Π°ΡΠ΅ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ²Π΅ΡΠ°, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π²ΠΎΠ·ΡΠ°ΠΆΠ°Π΅ΡΠ΅.
Π― ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ Π·Π°ΠΊΡΡΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΠ· Π»ΡΠ±ΠΎΠΏΡΡΡΡΠ²Π°, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΎΠ»ΡΠΊΠΎ Windows? ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ, ΠΏΠΎ ΡΠ»ΠΎΠ²Π°ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ 00 Π½Π° SO, ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±Π΅Π·% 20 Π½Π° Mac.
Π― ΡΠ°Π΄, ΡΡΠΎ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ. :)
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉ!
Π― Π±ΡΠ» Π±Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄ΠΈΠ²Π»Π΅Π½, Π΅ΡΠ»ΠΈ Π±Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠ΅Π»ΠΎ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. ΠΠΎΠ΄ Π·Π΄Π΅ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅Ρ URL-Π°Π΄ΡΠ΅Ρ, ΠΈ Ρ Π½Π΅ Π²ΠΈΠΆΡ Π½ΠΈΡΠ΅Π³ΠΎ, ΡΡΠΎ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ . Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΠ΅Π½ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²Π΅Π·Π΄Π΅ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ, ΡΠ°ΠΊ ΡΡΠΎ ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΏΡΡΡ Π΄Π°ΠΆΠ΅ Π΄Π»Ρ Π»ΡΠ΄Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ .