كيف تقوم بتعديل sys.path في Google App Engine (Python)؟
-
23-09-2019 - |
سؤال
لقد حاولت إضافة السطر التالي إلى البرنامج النصي المعالج (Main.py) ، لكن لا يبدو أنه يعمل:
sys.path.append ('subdir')
subdir
يعيش في دليل الجذر الخاص بي (أي واحد يحتوي app.yaml
).
لا يبدو أن هذا يعمل ، لأنه عندما أحاول استيراد الوحدات النمطية التي تعيش فيها subdir
, ، ينفجر تطبيقي.
المحلول
1) تأكد من أن لديك فارغة __init__.py
إملأ subdir
.
2) استخدام مسار كامل ؛ شيء من هذا القبيل:
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), 'subdir'))
تحرير: توفير المزيد من المعلومات للإجابة على الأسئلة المطروحة في تعليق.
كما يوضح نيك جونسون يمكنك وضع هذه الأسطر الثلاثة من التعليمات البرمجية في ملف يسمى fix_path.py
. ثم في الخاص بك main.py
ملف ، افعل هذا import fix_path
قبل جميع الواردات الأخرى. ارتباط بتطبيق تم اختباره باستخدام هذه التقنية.
ونعم ، __init__.py
الملف مطلوب ؛ لكل توثيق:
عند استيراد الحزمة ، يبحث Python من خلال الدلائل على Sys.Path تبحث عن الدليل الفرعي للحزمة.
ال
__init__.py
مطلوب الملفات لجعل Python يعامل الدلائل على أنها تحتوي على حزم ؛ يتم ذلك لمنع الدلائل ذات الاسم المشترك ، مثل String ، من إخفاء وحدات صالحة عن غير قصد تحدث لاحقًا على مسار البحث عن الوحدة النمطية. في أبسط الحالات ،__init__.py
يمكن أن يكون ملفًا فارغًا فقط ، ولكن يمكنه أيضًا تنفيذ رمز التهيئة للحزمة أو تعيين ملف__all__
متغير ، موصوف لاحقًا.
نصائح أخرى
لقد نجحت بالنسبة لي في إدخال dirs الجديدة كأول إدخالات في sys.path.
path_changer.py:
import os
import sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'libs'))
sys.path.insert(1, os.path.join(os.path.dirname(__file__), 'apps'))
app.py:
import path_changer
from google.appengine.ext.webapp.util import run_wsgi_app
from flask import Flask
import settings
app = Flask('myapp')
app.config.from_object('settings')
from website import views as website_views
run_wsgi_app(app)