Pip: التثبيت من git repo في الدليل المحلي يفشل إذا تم تحديده في requirements.txt ويحتوي المسار على مسافات

تم إنشاؤها على ١٨ أكتوبر ٢٠١٩  ·  3تعليقات  ·  مصدر: pypa/pip

بيئة

  • إصدار النقطة: 19.3.1
  • إصدار Python: 3.7.4
  • نظام التشغيل: Windows 10

وصف
يمكنني تثبيت حزمة من 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 .

سلوك متوقع
توقعت أن يتم تثبيت الحزمة من الدليل المحلي كما هو الحال عندما أقوم بتشغيل الأمر مباشرة.

كيفية التكاثر

  1. حدد git repo المحلي في مسار يحتوي على مسافات كتبعية في requirements.txt
  2. ثم قم بتشغيل pip install -r requirements.txt
  3. حدث خطأ.

انتاج |

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 ذات الصلة.

auto-locked support

ال 3 كومينتر

يخضع التعامل مع عروض الأسعار عند تنفيذ النقطة مباشرة إلى قوقعتك. في 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 ولا أرى أي شيء قد يتغير عبر الأنظمة الأساسية. على أي حال ، يجب أن يعمل الترميز المئوي في كل مكان خارج الصندوق ، لذا فهو بالتأكيد الطريق الذي يجب اتباعه حتى بالنسبة للأشخاص الذين قد يجعلونه يعمل بطريقة أخرى على منصات أخرى.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات