Flynn: لم يتم تثبيت حزم git pip المخصصة

تم إنشاؤها على ٩ أبريل ٢٠١٨  ·  9تعليقات  ·  مصدر: flynn/flynn

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

requests-respectful = { git = '[email protected]:mcescalante/requests-respectful.git', editable = 'true' }

عندما أقوم بالنشر إلى flynn ، يتم نشر كل شيء وإصداره بنجاح (لا توجد أخطاء في تثبيت Pipfile.lock ، يتم تحديث Pipfile.lock) ، ولكن عندما انتقل إلى تطبيقي ، واجهت الخطأ:

No module named 'requests_respectful'

لقد تحققت أيضًا من خلال تشغيل flynn run bash ثم pip list . الحزمة مفقودة من القائمة التي تم إرجاعها ، مما يشير إلى أنه لم يتم تثبيتها.

لقد نظرت سريعًا في المشكلات الموجودة في حزمة بناء Heroku المنبثقة والتي تُستخدم في Python لمعرفة ما إذا كانت هناك مشكلات معلقة ، ولكن هذا النشر يعمل بالفعل على Heroku نفسه بشكل جيد ، ولا توجد مشكلات كبيرة معلقة واضحة لي والتي من شأنها أن تسبب ذلك. يمكنك العثور على ملف Pipfile الذي أستخدمه في الريبو: https://github.com/mcescalante/oh-fitbit-integration/blob/master/Pipfile

ال 9 كومينتر

mcescalante أظن أن التثبيت فشل لأنك تستخدم SSH URI لكن Flynn لا تثق في مفتاح مضيف GitHub.

أود أن أقترح إما استخدام HTTP URI:

https://github.com/mcescalante/requests-respectful.git

أو تحديث التطبيق gitreceive بحيث يثق في مفتاح مضيف GitHub SSH:

flynn -a gitreceive env set SSH_CLIENT_HOSTS="$(ssh-keyscan -H github.com)"

lmars شكرا على الرد! لقد رأيت الأمر gitreceive الخاص بك في موضوع آخر وقمت بالفعل بإضافة مفتاحي الخاص قبل فتح هذه المشكلة - أدت إضافة مفتاحي الخاص إلى حل خطأ سابق أثناء تثبيت Pipfile.lock حول عدم القدرة على استنساخ الريبو.

سأعطي كل من هذه اللقطة وأرى ما سيحدث وأعد تقريرًا!

قمت للتو بإجراء كلا التغييرين ، وأرى نفس الأخطاء بالضبط في تطبيقي ولكن لا توجد مشاكل عند النشر. فيما يلي سجلات النشر الخاصة بي ، والتي لا تظهر أي أخطاء للتثبيت:

➜  oh-fitbit-integration git:(fix-flynn) git push flynn fix-flynn:master                     
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 557 bytes | 557.00 KiB/s, done.
Total 4 (delta 3), reused 0 (delta 0)
-----> Building fitbit...
-----> Python app detected
-----> Installing pip
-----> Installing requirements with latest pipenv...
       Installing dependencies from Pipfile.lock (82d7ab)…
-----> $ python manage.py collectstatic --noinput
       /app/.heroku/python/lib/python3.6/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
       """)
       DEBUG 2018-04-09 19:58:42,724 base 822 xxxx Configuring Raven for host: None
       INFO 2018-04-09 19:58:42,725 base 822 xxxx Raven is not configured (logging is disabled). Please see the documentation for more information.
       120 static files copied to '/tmp/build/app/staticfiles', 134 post-processed.

-----> Discovering process types
       Procfile declares types -> release, web, worker
-----> Compiled slug size is 67.38 MiB
-----> Creating release...
=====> Application deployed
To https://myclusterurlhere-redacted/fitbit.git
   da75e82..f32f030  fix-flynn -> master

و flynn run bash و pip list الناتج:

➜  oh-fitbit-integration git:(fix-flynn) flynn run bash
flynn@hash-redaced:~$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
amqp (2.2.2)
arrow (0.12.1)
billiard (3.5.0.3)
celery (4.1.0)
certifi (2018.1.18)
chardet (3.0.4)
defusedxml (0.5.0)
dj-database-url (0.5.0)
Django (2.0.4)
gunicorn (19.7.1)
idna (2.6)
kombu (4.1.0)
multidict (4.1.0)
oauthlib (2.0.7)
pip (9.0.3)
pipenv (11.9.0)
psycopg2 (2.7.4)
PyJWT (1.6.1)
python-dateutil (2.7.2)
python-social-auth (0.3.6)
python3-openid (3.1.0)
pytz (2018.3)
PyYAML (3.12)
raven (6.6.0)
redis (2.10.6)
requests (2.18.4)
requests-oauthlib (0.8.0)
setuptools (39.0.1)
six (1.11.0)
social-auth-core (1.7.0)
urllib3 (1.22)
vcrpy (1.11.1)
vine (1.1.4)
virtualenv (15.2.0)
virtualenv-clone (0.3.0)
wheel (0.31.0)
whitenoise (3.3.1)
wrapt (1.10.11)
yarl (1.1.1)

هذه نسخة مكررة من # 3932. أعتقد أن هذا يرجع إلى بعض الافتراضات التي تم إجراؤها في حزمة بناء python حول المسارات التي تؤدي إلى مسار غير صالح / غير صحيح في ملف egg-link .

هناك أيضًا هذه المشكلة المغلقة مؤخرًا: https://github.com/heroku/heroku-buildpack-python/issues/654.

جرب أحدث إصدار من buildpack مع:

flynn env set BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-python#v132

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

lmars فكرة رائعة ، لقد أعطيت هذه اللقطة للتو ولكن للأسف ما زلت أحصل على No module named 'requests_respectful' مع مجموعة buildpack الخاصة بي في env إلى BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-python#v132

حسنًا ، نظرًا لأنني علقت في هذه المشكلة (أعتقد أنها مشكلة pipenv جديدة) ، أود إضافة مقارنة Flynn و Heroku ، من أجل الاكتمال. (في حالتي ، استخدمت حزمة luminol كتبعية قابلة للتحرير في ملف Pipenv)

فلين:

flynn<strong i="7">@x</strong>:~$ python
Python 3.6.6 (default, Aug  1 2018, 21:10:48) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', '/app', '/app/.heroku/python/lib/python36.zip', '/app/.heroku/python/lib/python3.6', '/app/.heroku/python/lib/python3.6/lib-dynload', '/app/.heroku/python/lib/python3.6/site-packages']

flynn<strong i="8">@x</strong>:~$ cat /app/.heroku/python/lib/python3.6/site-packages/easy-install.pth
/tmp/build//app/src/luminol/src

هيروكو:

~ $ python
Python 3.6.6 (default, Aug  1 2018, 21:10:15) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', '/app', '/app/.heroku/python/lib/python36.zip', '/app/.heroku/python/lib/python3.6', '/app/.heroku/python/lib/python3.6/lib-dynload', '/app/.heroku/python/lib/python3.6/site-packages', '/app/src/luminol/src']


~ $ cat /app/.heroku/python/lib/python3.6/site-packages/easy-install.pth
/app/src/luminol/src

TLDR ؛

تخزين البرنامج النصي أدناه فيمجلد / bin / post_compile:

#!/usr/bin/env bash

set +e
find .heroku/python/lib/python*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#[^>]*/app/#$(pwd)/#" &> /dev/null
set -e

تفسير:

Python buildpack (https://github.com/heroku/heroku-buildpack-python/blob/v144/bin/compile)

يقوم بهذه الخطوات بالذات بالترتيب التالي:

# L178: المصدر "$ BIN_DIR / steps / hooks / pre_compile"
# L201: المصدر "$ BIN_DIR / steps / pipenv-python-version"
# L256: المصدر "$ BIN_DIR / steps / eggpath-fix"
# L295: المصدر "$ BIN_DIR / steps / pip-install"
# L359: المصدر "$ BIN_DIR / steps / hooks / post_compile"
# L363: المصدر "$ BIN_DIR / steps / eggpath-fix2

والأجزاء الشيقة هنا موجودة في /eggpath-fix و /eggpath-fix2

في ملف / eggpath-fix
يستبدل (عبر sed) s#/app/#/$(pwd)/# /app/ ~> /$(pwd)/

في / eggpath-fix2
يستبدل (عبر sed) s#$(pwd)#/app# $(pwd) ~> /app

لسبب ما ، انتهى المطاف بـ Heroku بعد eggpath-fix2 في هذه الحالة:
تم تقييم $ (pwd) إلى /tmp/build_HASH
/tmp/build_HASH/src/luminol/src ~> /app/src/luminol/src

لكن ينتهي Flynn بعد eggpath-fix2 في الحالة:
تم تقييم $ (pwd) إلى /tmp/build/app
/tmp/build//tmp/build/app/src/luminol/src ~> /tmp/build//app/src/luminol/src

الذي يمكنك رؤيته في التعليق السابق.
لست متأكدًا من أين وماذا عندما يكون الخطأ (تلك الاستبدالات أصبحت مجنونة) ولكن الإصلاح المقترح (تم تشغيله كبرنامج نصي post_compile والذي يحدث تقريبًا قبل eggpath-fix2 ) ويجب أن يصحح أي مسارات مجموعة خاطئة أثناء تنفيذ حزمة python من flynn باستخدام sed:

s#[^>]*/app/#$(pwd)/#
[^>] * (مطابقة غير جشعة) - مقدمة من http://0x2a.at/blog/2008/07/sed--non-greedy-matching/

لذلك يجب أن يصلح هذا /tmp/build//tmp/build/app/src/luminol/src ~> /tmp/build/app/src/luminol/src
والتي سيتم سحقها في النهاية بمقدار eggpath-fix2 إلى /app/src/luminol/src مما يؤدي إلى مسارات Python الصحيحة.

نسخة موسعة من TLDR ؛

#!/usr/bin/env bash

DEBUG=true

if [ "$DEBUG" = true ] ; then
    echo "PWD : $(pwd)"
    echo "Looking for .pth packages"
    find .heroku/python/lib/python*/site-packages/ -name "*.pth"
    echo "------- Original content(s) -------"
    find .heroku/python/lib/python*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 cat
fi

set +e
# http://0x2a.at/blog/2008/07/sed--non-greedy-matching/
find .heroku/python/lib/python*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 sed -i -e "s#[^>]*/app/#$(pwd)/#" &> /dev/null
set -e

if [ "$DEBUG" = true ] ; then
    echo "------- Replaced content(s) -------"
    find .heroku/python/lib/python*/site-packages/ -name "*.pth" -print0 2> /dev/null | xargs -r -0 -n 1 cat
fi

لم تتم صيانة Flynn وسيتم إغلاق بنيتنا التحتية في 1 يونيو 2021. راجع README للحصول على التفاصيل.

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

القضايا ذات الصلة

philiplb picture philiplb  ·  4تعليقات

Kentoseth picture Kentoseth  ·  4تعليقات

michaelyork picture michaelyork  ·  5تعليقات

WriteCodeEveryday picture WriteCodeEveryday  ·  5تعليقات

IsNull picture IsNull  ·  5تعليقات