سؤال

لقد حاولت إضافة السطر التالي إلى البرنامج النصي المعالج (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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top