рд╡рд╛рддрд╛рд╡рд░рдг
рд╡рд┐рд╡рд░рдг
рдореИрдВ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдЧрд┐рдЯ рд░реЗрдкреЛ рд╕реЗ рдПрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ рдЬреИрд╕реЗ:
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 рдкреНрд░рд╢реНрди рднреА рджреЗрдЦреЗрдВред
рдЬрдм рдкрд╛рдЗрдк рдХреЛ рд╕реАрдзреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЙрджреНрдзрд░рдгреЛрдВ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдЖрдкрдХреЗ рд╢реЗрд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдмреИрд╢ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрджреНрдзрд░рдгреЛрдВ рдХреЗ рдЧреИрд░-рдиреЗрд╕реНрдЯреЗрдб рдЬреЛрдбрд╝реЗ рдЫреАрди рд▓рд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддрд░реНрдХ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ/рдмрд╛рдж рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рджреВрд╕рд░реА рдУрд░, рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдлрд╝рд╛рдЗрд▓реЗрдВ, рдСрдкреНрдЯ-рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдХреЛрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдпрд╛ рд╕реНрдЯреНрд░рд┐рдкрд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдпреВрдЖрд░рдПрд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рдЧреИрд░-рд╡реИрдз рдпреВрдЖрд░рдПрд▓ рд╡рд░реНрдг (рдЬреИрд╕реЗ рд╕реНрдкреЗрд╕) рдкреНрд░рддрд┐рд╢рдд-рдПрдиреНрдХреЛрдбреЗрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕реНрдкреЗрд╕% 20 рд╣реИ)ред рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рдЬреЛ рдкрде рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╡рд╛рд▓реЗ рдЧрд┐рдЯ рд░реЗрдкреЛ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ:
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))
рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж !!
рдХреНрдпрд╛ рдЖрдк SO рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЕрдиреНрдпрдерд╛ рдореИрдВ рдЖрдкрдХреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЛ рдЙрддреНрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рд╡рд┐рдВрдбреЛрдЬрд╝ рдореБрджреНрджрд╛ рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ SO рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 00 рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдореИрдХ рдкрд░% 20 рдХреЗ рдмрд┐рдирд╛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реАред :)
рдХреГрдкрдпрд╛ рдЖрдЧреЗ рдЬрд╛рдПрдВ!
рдЕрдЧрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдордВрдЪ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рддреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ред рдХреЛрдб рдпрд╣рд╛рдБ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпрд╛ рдпреВрдЖрд░рдПрд▓ рдмрд╛рд╣рд░ рд╡рд┐рднрд╛рдЬрди рдФрд░ рдореИрдВ рдХреБрдЫ рднреА рд╣реИ рдХрд┐ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддрд┐рд╢рдд-рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╣рд░ рдЬрдЧрд╣ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдЬрд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред