بيئة
وصف
يمكنني تثبيت حزمة من git repo في دليل محلي على النحو التالي:
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 ذات الصلة.
يخضع التعامل مع عروض الأسعار عند تنفيذ النقطة مباشرة إلى قوقعتك. في Bash ، على سبيل المثال ، يتم تجريد الأزواج غير المتداخلة من علامات الاقتباس وتسلسل محتوياتها مع ما يأتي قبل / بعد لإنشاء كل وسيطة.
من ناحية أخرى ، تتم قراءة ملفات المتطلبات كما هي عن طريق optparse ولا يتم إجراء معالجة خاصة لعروض الأسعار أو تجريدها.
ومع ذلك ، في هذه الحالة عند محاولة توفير عنوان URL ، يجب أن تكون أحرف URL غير الصالحة (مثل المسافة) مشفرة بنسبة مئوية (المسافة هي٪ 20). راجع هذا البرنامج النصي للحصول على مثال نجح في تثبيت git repo الذي يحتوي على مسافات في المسار:
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؟ وإلا سأقتبس شرحك كإجابة ، إذا كنت لا تمانع.
سأغلق هذه المشكلة ، من باب الفضول ، هل هذه مشكلة Windows فقط؟ لأنه وفقًا للمستخدم 00 على SO ، فإنه يعمل معه بدون٪ 20 على Mac.
أنا سعيد لأنها ساعدت. :)
رجاءا واصل!
سأفاجأ قليلاً إذا كان السلوك خاصًا بالمنصة. يجب أن يكون الرمز هنا هو ما يقسم عنوان URL ولا أرى أي شيء قد يتغير عبر الأنظمة الأساسية. على أي حال ، يجب أن يعمل الترميز المئوي في كل مكان خارج الصندوق ، لذا فهو بالتأكيد الطريق الذي يجب اتباعه حتى بالنسبة للأشخاص الذين قد يجعلونه يعمل بطريقة أخرى على منصات أخرى.