<p>لا يحترم pipenv النقطة</p>

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

أنا أستخدم devpi كمستودع pypi خاص حيث يمكنني تخزين حزم pypi مؤقتًا بالوكيل وإضافة الحزم الخاصة بي.

يبدو pip.conf كما يلي:

[global]
index_url = https://pypi.priv.xxx/prod/+simple/
[search]
index = https://pypi.priv.xxx/prod/

تعذر العثور على مشكلة أخرى تذكر هذه المشكلة.

التعليق الأكثر فائدة

قد تحتوي هذه الإدخالات على بيانات اعتماد لن تدخل بالتأكيد إلى ملف Pipfile الذي من المفترض أن يدخل في إعادة شراء المشروع.

ال 15 كومينتر

يجب أن تذهب هذه الإدخالات إلى ملف Pipfile الخاص بك.

@ kennethreitz لا أعتقد أنني أوضحت قضيتي حقًا ، لذا دعني أحاول إقناعك ببعض حالات الاستخدام التي واجهتها أثناء البدء في استخدام pipenv.
أولاً ، لقد بدأت للتو في الغوص في pipenv ، كيف يعمل ورمزه. أعلم أنه يمكنك تحديد مصدر في Pipfile ، لقد رأيت أيضًا أنه يمكنك استخدام فهارس مسماة ، تبدو مشابهة لما يمكن القيام به في ~/.pypirc .

إنشاء مشروع / بيئة pipenv جديدة

$ mkdir foobar
$ cd foobar
$ pipenv install --verbose requests
⠋New python executable in /home/xxx/.local/share/virtualenvs/foobar-JdBU33Mf/bin/python         
Installing setuptools, pip, wheel...done.                                                      

Virtualenv location: /home/xxx/.local/share/virtualenvs/foobar-JdBU33Mf                         
Installing requests… 
⠙Installing u'requests'
$ "/home/xxx/.local/share/virtualenvs/foobar-JdBU33Mf/bin/pip" install   --verbose   "requests"
-i https://pypi.python.org/simple --exists-action w
Collecting requests
  1 location(s) to search for versions of requests:
  * https://pypi.python.org/simple/requests/
  Getting page https://pypi.python.org/simple/requests/
[...]
Successfully installed certifi-2017.7.27.1 chardet-3.0.4 idna-2.6 requests-2.18.4 urllib3-1.22
Cleaning up...

Adding requests to Pipfile's [packages]…
  PS: You have excellent taste! ✨ 🍰 ✨
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Updated Pipfile.lock (76e6d4)!

قم بتثبيت حزمة من فهرس إضافي

عند تثبيت حزمة لا يعرفها pypi ، فلن تعمل على الفور (إنها تعمل مع أدوات النقطة أو النقطة لأنها تستخدم إعدادات pip.conf ).

$ pipenv install --verbose palantir
Installing palantir…
⠋Installing u'palantir'
$ "/home/hr/.local/share/virtualenvs/foobar-JdBU33Mf/bin/pip" install   --verbose   "palantir" -i https://pypi.python.org/simple --exists-action w
Collecting palantir
  1 location(s) to search for versions of palantir:
[...]
Error:  An error occurred while installing palantir!
  Could not find a version that satisfies the requirement palantir (from versions: )
No matching distribution found for palantir

إذا تم تعيين Pipfile بمؤشر جديد وكانت الحزمة مرتبطة بهذا الفهرس (باتباع https://docs.pipenv.org/advanced.html#specifying-package-indexes) ، في محاولة لتثبيت الحزمة من سيستدعي سطر الأوامر pypi أولاً على أي حال:

$ pipenv install --verbose palantir
Installing palantir… 
⠋Installing u'palantir'                                                                        
$ "/home/hr/.local/share/virtualenvs/foobar-JdBU33Mf/bin/pip" install   --verbose   "palantir"
-i https://pypi.python.org/simple --exists-action w                                            
⠋$ "/home/hr/.local/share/virtualenvs/foobar-JdBU33Mf/bin/pip" install   --verbose   "palantir"
 -i https://pypi.priv.xxx/prod/+simple/ --exists-action w                
Collecting palantir                         
  1 location(s) to search for versions of palantir:
[...]
Successfully installed palantir-1.1.5
Cleaning up...

Adding palantir to Pipfile's [packages]…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…

استخدم ملف متطلبات تم إنشاؤه بواسطة pip-tools

عند استخدام pip-tools ، سيبدأ ملف المتطلبات بالفهرس المستخدم لتثبيت الحزم:

#
# This file is autogenerated by pip-compile
# To update, run:
#
#    pip-compile --output-file requirements.txt requirements.in
#
--index-url https://pypi.priv.xxx/prod/+simple/

bcrypt==3.0.0
[...]

لا يتم احترام هذا الإعداد عند استخدام ملف المتطلبات (البدء بمشروع نظيف):

$ pipenv install -r requirements.txt
Requirements file provided! Importing into Pipfile…
Pipfile.lock (c23e27) out of date, updating to (3c7b08)…
Locking [dev-packages] dependencies…
Locking [packages] dependencies…
CRITICAL:pip.index:Could not find a version that satisfies the requirement palantir==1.1.5 (from versions: )
Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.

ملاحظات

أشعر أن هناك نوعًا من "الفجوة" في التعامل مع الفهارس وتجربة المستخدم:

  • لا يمكن للمستخدم تحديد فهرس (بالاسم أو المورد) أثناء التثبيت من خلال سطر الأوامر الذي يفرض على المستخدم إنشاء إدخال للفهرس في Pipfile وربط كل حزمة بفهرس. هذا ليس مناسبًا جدًا في حالة وجود مجموعة من الحزم من pypi وواحدة فقط من فهرس خاص.
  • عند تثبيت حزمة من سطر الأوامر ، ما هو الفهرس الافتراضي الذي يجب استخدامه؟
  • عند تثبيت حزمة من فهرس مخصص ، لا يمكن تحديدها في سطر الأوامر.
  • عندما يتم تحديد فهرس في ملف متطلبات ، يتم تجاهله.

أنا أغوص في الكود لتوفير علاقات عامة لتغطية المشكلات الموضحة أعلاه:

  • عند بدء المشروع ، حدد pip.conf للفهارس المخصصة
  • تحديد فهرس افتراضي Pipfile ليتم استخدامه عندما لا يتم تحديد أي منها
  • توفير فهرس بالاسم أو المورد في سطر الأوامر
  • احترام الفهرس المقدم في ملف المتطلبات وإضافته إلى Pipfile

إذا تم استخدام فهرس إما في ملف المتطلبات أو في سطر الأوامر ولكنه غير معروف لـ Pipfile ، فيجب إضافة إدخال باسم تلقائي مشابه لتسمية venv المستخدمة في pipenv.

لماذا أهتم كثيرا؟ العيش في الصين ، pypi ليس دائمًا متاحًا أو سريعًا (العديد من المهلات أو البطء الشديد) لذا فإن وجود فهرس مثل devpi يخزن ويسمح لي بمزج حزمتي الخاصة يعد فوزًا مزدوجًا. هذا يجعل مطورنا ، والاختبار ، وأداة الإرساء ، وما إلى ذلك طريقة أسرع.

على سبيل المثال ، هذا سلوك كلاسيكي جدًا يحدث عندما تتدخل المهلات:

Locking [dev-packages] dependencies…
Locking [packages] dependencies…
Warning: Your dependencies could not be resolved. You likely have a mismatch in your sub-dependencies.
  You can use $ pipenv install --skip-lock to bypass this mechanism, then run $ pipenv graph to inspect the situation.
Could not find a version that matches requests==2.17.3,==2.18.4
Tried: 0.2.0, 0.2.0, 0.2.1, 0.2.1, 0.2.2, 0.2.2, 0.2.3, 0.2.3, 0.2.4, 0.2.4, 0.3.0, 0.3.0, 0.3.1, 0.3.1, 0.3.2, 0.3.2, 0.3.3, 0.3.3, 0.3.4, 0.3.4, 0.4.0, 0.4.0, 0.4.1, 0.4.1, 0.5.0, 0.5.0, 0.5.1, 0.5.1, 0.6.0, 0.6.0, 0.6.1, 0.6.1, 0.6.2, 0.6.2, 0.6.3, 0.6.3, 0.6.4, 0.6.4, 0.6.5, 0.6.5, 0.6.6, 0.6.6, 0.7.0, 0.7.0, 0.7.1, 0.7.1, 0.7.2, 0.7.2, 0.7.3, 0.7.3, 0.7.4, 0.7.4, 0.7.5, 0.7.5, 0.7.6, 0.7.6, 0.8.0, 0.8.0, 0.8.1, 0.8.1, 0.8.2, 0.8.2, 0.8.3, 0.8.3, 0.8.4, 0.8.4, 0.8.5, 0.8.5, 0.8.6, 0.8.6, 0.8.7, 0.8.7, 0.8.8, 0.8.8, 0.8.9, 0.8.9, 0.9.0, 0.9.0, 0.9.1, 0.9.1, 0.9.2, 0.9.2, 0.9.3, 0.9.3, 0.10.0, 0.10.0, 0.10.1, 0.10.1, 0.10.2, 0.10.2, 0.10.3, 0.10.3, 0.10.4, 0.10.4, 0.10.6, 0.10.6, 0.10.7, 0.10.7, 0.10.8, 0.10.8, 0.11.1, 0.11.1, 0.11.2, 0.11.2, 0.12.0, 0.12.0, 0.12.1, 0.12.1, 0.13.0, 0.13.0, 0.13.1, 0.13.1, 0.13.2, 0.13.2, 0.13.3, 0.13.3, 0.13.4, 0.13.4, 0.13.5, 0.13.5, 0.13.6, 0.13.6, 0.13.7, 0.13.7, 0.13.8, 0.13.8, 0.13.9, 0.13.9, 0.14.0, 0.14.0, 0.14.1, 0.14.1, 0.14.2, 0.14.2, 1.0.0, 1.0.0, 1.0.1, 1.0.1, 1.0.2, 1.0.2, 1.0.3, 1.0.3, 1.0.4, 1.0.4, 1.1.0, 1.1.0, 1.2.0, 1.2.0, 1.2.1, 1.2.1, 1.2.2, 1.2.2, 1.2.3, 1.2.3, 2.0.0, 2.0.0, 2.0.0, 2.0.0, 2.0.1, 2.0.1, 2.0.1, 2.0.1, 2.1.0, 2.1.0, 2.1.0, 2.1.0, 2.2.0, 2.2.0, 2.2.0, 2.2.0, 2.2.1, 2.2.1, 2.2.1, 2.2.1, 2.3.0, 2.3.0, 2.3.0, 2.3.0, 2.4.0, 2.4.0, 2.4.0, 2.4.0, 2.4.1, 2.4.1, 2.4.1, 2.4.1, 2.4.2, 2.4.2, 2.4.2, 2.4.2, 2.4.3, 2.4.3, 2.4.3, 2.4.3, 2.5.0, 2.5.0, 2.5.0, 2.5.0, 2.5.1, 2.5.1, 2.5.1, 2.5.1, 2.5.2, 2.5.2, 2.5.2, 2.5.2, 2.5.3, 2.5.3, 2.5.3, 2.5.3, 2.6.0, 2.6.0, 2.6.0, 2.6.0, 2.6.1, 2.6.1, 2.6.1, 2.6.1, 2.6.2, 2.6.2, 2.6.2, 2.6.2, 2.7.0, 2.7.0, 2.7.0, 2.7.0, 2.8.0, 2.8.0, 2.8.0, 2.8.0, 2.8.1, 2.8.1, 2.8.1, 2.8.1, 2.9.0, 2.9.0, 2.9.0, 2.9.0, 2.9.1, 2.9.1, 2.9.1, 2.9.1, 2.9.2, 2.9.2, 2.9.2, 2.9.2, 2.10.0, 2.10.0, 2.10.0, 2.10.0, 2.11.0, 2.11.0, 2.11.0, 2.11.0, 2.11.1, 2.11.1, 2.11.1, 2.11.1, 2.12.0, 2.12.0, 2.12.0, 2.12.0, 2.12.1, 2.12.1, 2.12.1, 2.12.1, 2.12.2, 2.12.2, 2.12.2, 2.12.2, 2.12.3, 2.12.3, 2.12.3, 2.12.3, 2.12.4, 2.12.4, 2.12.4, 2.12.4, 2.12.5, 2.12.5, 2.12.5, 2.12.5, 2.13.0, 2.13.0, 2.13.0, 2.13.0, 2.14.0, 2.14.0, 2.14.0, 2.14.0, 2.14.1, 2.14.1, 2.14.1, 2.14.1, 2.14.2, 2.14.2, 2.14.2, 2.14.2, 2.15.1, 2.15.1, 2.15.1, 2.15.1, 2.16.0, 2.16.0, 2.16.0, 2.16.0, 2.16.1, 2.16.1, 2.16.1, 2.16.1, 2.16.2, 2.16.2, 2.16.2, 2.16.2, 2.16.3, 2.16.3, 2.16.3, 2.16.3, 2.16.4, 2.16.4, 2.16.4, 2.16.4, 2.16.5, 2.16.5, 2.16.5, 2.16.5, 2.17.0, 2.17.0, 2.17.0, 2.17.0, 2.17.1, 2.17.1, 2.17.1, 2.17.1, 2.17.2, 2.17.2, 2.17.2, 2.17.2, 2.17.3, 2.17.3, 2.17.3, 2.17.3, 2.18.0, 2.18.0, 2.18.0, 2.18.0, 2.18.1, 2.18.1, 2.18.1, 2.18.1, 2.18.2, 2.18.2, 2.18.2, 2.18.2, 2.18.3, 2.18.3, 2.18.3, 2.18.3, 2.18.4, 2.18.4, 2.18.4, 2.18.4

تضمين التغريدة
لا. على سبيل المثال الحقيقي ، أعيش في الصين. عادة ما تكون سرعة pypi.python.org أقل من 50 كيلو / ثانية ، ولا بد لي من وضع مرآة صينية عالمية. أو كنت أرى الكثير من

  File "d:\python27\lib\site-packages\pipenv\patched\pip\_vendor\requests\packages\urllib3\response.
py", line 324, in read
    flush_decoder = True
  File "d:\python27\lib\contextlib.py", line 35, in __exit__
    self.gen.throw(type, value, traceback)
  File "d:\python27\lib\site-packages\pipenv\patched\pip\_vendor\requests\packages\urllib3\response.
py", line 246, in _error_catcher
    raise ReadTimeoutError(self._pool, None, 'Read timed out.')
pip._vendor.requests.packages.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='pypi.py
thon.org', port=443): Read timed out.

لذا ، تقصد أنه في كل مرة أستخدم فيها pipenv أحتاج إلى كتابة pip.conf [Pipfile] لذلك؟ هذا غير مقبول بالنسبة لي.

قد تحتوي هذه الإدخالات على بيانات اعتماد لن تدخل بالتأكيد إلى ملف Pipfile الذي من المفترض أن يدخل في إعادة شراء المشروع.

eromoehrbonz هكذا هي المشكلة التي يقرر pipenv pypi أولا بدلا من الخوادم الخاصة؟

بالنسبة لي هو. أنا حقا بحاجة إلى إعدادات مرآة عالمية.

pip.conf يتبع:

  1. أولاً يتم قراءة الملف على مستوى الموقع ، ثم
  2. تتم قراءة الملف لكل مستخدم ، وأخيرًا
  3. تتم قراءة الملف الخاص بـ virtualenv.

احترام pip.conf يعني أنه يمكن للمستخدم الانتقال إلى pipenv بسلاسة.

تعجبني فكرة أن تكون قادرًا على وضع هذه التكوينات في Pipfile (لمشاركة التكوين بسهولة مع المطورين الآخرين) ، ولكن يجب أيضًا أن تحترم pipenv بشكل نهائي pip.conf (استخدمها لأي شيء غير محدد في Pipfile).

erinxocon هذه إحدى المشكلات التي حددتها. لقد كنت مشغولًا جدًا بالعمل ولكني آمل أن أقدم العلاقات العامة الأولى قبل الأسبوع المقبل.

مرحبًا ، @ kennethreitz شكرًا على المشروع الرائع.

لدي سؤال ، هل ستعيد النظر في موقفك من هذه القضية بعد الحجج التي تم طرحها في تلك المناقشة؟

لدي حالة استخدام أخرى مشابهة جدًا مع pip.conf وامتلاك بيانات اعتماد في ملف pip.conf المنفصل صالح للحصول على بناء يمكن التنبؤ به على خط أنابيب CI / CD وآلة تطوير محلية.

hrbonz الآن لقد وجدت حلًا لاستخدام متغيرات env من $PIP_INDEX_URL من النقطة حتى ملف pip.conf سيتم دعمه بواسطة pipenv. يمكن الحصول على تلك $PIP_VARIABLE الآن من ملف .env .

أعتقد أن الجمع بين pypa / pip # 3728 والفهارس المخصصة سيكون الحل للفهارس الخاصة دون كشف بيانات الاعتماد. علق أيضا في # 1406.

إليك حل واحد إذا كان كل ما تحتاجه هو اسم الفهرس وعنوان URL (على سبيل المثال ، باستخدام devpi ). يمكنك استدعاء وظيفة shell هذه متى أردت إنشاء ملف Pipfile يحتوي على اسم الفهرس المخصص وعنوان URL الخاص بك ، ولكنه بخلاف ذلك أصلي.

pipenv_init() {
  # pipenv issue #856: pipenv doesn't respect pip.conf
  # https://github.com/pypa/pipenv/issues/856

  # This function accepts one optional argument: the path to the pipenv
  # executable. If not set or empty, defaults to PATH lookup.
  local PIPENV="${1:-pipenv}"
  if ! command -v -- "${PIPENV}" > /dev/null; then
    >&2 printf '%s\n' 'pipenv not found'
    return 1
  fi

  # Check for required environment variables.
  if [[ -z "${PIPENV_INDEX_NAME-}" ]] || [[ -z "${PIPENV_INDEX_URL-}" ]]; then
    >&2 printf '%s\n' 'PIPENV_INDEX_{NAME,URL} env vars must be set and not empty'
    return 1
  fi

  # Create fresh Pipfile and virtualenv.
  #
  # While doing so, move requirements.txt out of the way so pipenv
  # doesn't attempt to populate the virtualenv before we have a chance
  # to modify Pipfile.
  # https://github.com/pypa/pipenv/blob/v9.0.3/pipenv/cli.py#L308-L330
  # https://github.com/pypa/pipenv/blob/v9.0.3/pipenv/project.py#L117-L119
  # https://github.com/pypa/pipenv/blob/v9.0.3/pipenv/project.py#L231-L240
  # https://github.com/pypa/pipenv/blob/v9.0.3/pipenv/utils.py#L1112-L1124
  local TEMP_REQUIREMENTS_TXT
  "${PIPENV}" --rm || true
  rm -f -- Pipfile Pipfile.lock
  if [[ -f requirements.txt ]]; then
    TEMP_REQUIREMENTS_TXT="$(mktemp)"
    mv -- requirements.txt "${TEMP_REQUIREMENTS_TXT}"
  fi
  "${PIPENV}" install
  if [[ -n "${TEMP_REQUIREMENTS_TXT}" ]]; then
    mv -- "${TEMP_REQUIREMENTS_TXT}" requirements.txt
  fi
  rm -- Pipfile.lock

  # Within Pipfile's `[[source]]` section, set `name` to
  # `${PIPENV_INDEX_NAME}` and `url` to `${PIPENV_INDEX_URL}`.
  local TEMP_PIPFILE="$(mktemp)"
  < Pipfile \
      sed \
      -e '/^\[\[source\]\]$/,/^\[/ { s|^\(name = \).*|\1"'"${PIPENV_INDEX_NAME}"'"| ; s|^\(url = \).*|\1"'"${PIPENV_INDEX_URL}"'"| ; }' \
    > "${TEMP_PIPFILE}"
  mv -- "${TEMP_PIPFILE}" Pipfile
}

يا رجل بجدية. لديّ حالة استخدام بسيطة تتأثر مباشرةً بهذه المشكلة.

لدي مشروع يستخدم pipenv. أكتب هذا المشروع في المنزل وفي العمل.
في المنزل ، ليس لدي مشكلة. في العمل ، لا بد لي من استخدام مؤشر الأنابيب الداخلي.

نظرًا لأن Pipfile ملتزم ودفع إلى git ، لا يمكنني الاستمرار في تغييره لأنني قفز من المنزل إلى العمل. أرغب في الحصول على تكوين خارجي يشير إلى pipenv بأنه يتعين علي استخدام مؤشر آخر.

وضع هذا التكوين داخل Pipfile لا يعمل.

أي تحديثات على هذا؟

GhostofGoesninrodhrbonz الثابتة في # 1769 و # 1809 - متغيرات البيئة في Pipfiles يتم توسيع الآن في وقت التشغيل

نشكرك جميعًا على سعة صدرك ، كانت أهم أولوياتنا هي الوظيفة الأساسية لقاعدة التعليمات البرمجية ، لذلك تميل ميزات مثل هذه إلى التسلل عبر الشقوق. يسعدنا دائمًا مناقشة المساهمات الخاصة بالعناصر التي لا نعطيها الأولوية حاليًا!

البديل الوحيد الذي يمكنني التفكير فيه حتى يتم إصلاح ذلك هو تجاوز عنوان URL لـ PyPi بحيث يتم إعادة توجيه كل حركة المرور إلى المرآة الداخلية لـ PyPi (على سبيل المثال ، Artifactory أو غير ذلك). نظرًا لأن PyPi مقيد داخليًا على أي حال.

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