لدي تبعية واحدة في ملف 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
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 ؛
تخزين البرنامج النصي أدناه في
#!/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 للحصول على التفاصيل.