كيفية الرجوع إلى حزمة بايثون عند الملف يحتوي على فترة

StackOverflow https://stackoverflow.com/questions/1828127

سؤال

أنا باستخدام جانغو و لدي ملف اسمه models.admin.py و أريد أن أفعل الفكرة التالية في models.py:

from "models.admin" import *

إلا أنني على خطأ في بناء الجملة من أجل وجود علامات الاقتباس المزدوجة.ولكن إذا أنا أفعل

from models.admin import *

ثم أحضر "ImportError:لا وحدة اسمه مشرف"

هل هناك أي طريقة الاستيراد من الثعبان ملف له فترة في اسمه ؟

هل كانت مفيدة؟

المحلول

في الواقع، أنت يمكن استيراد الوحدة النمطية باسم غير صالح. ولكن عليك أن تحتاج إلى استخدام imp لذلك، مثل اسم بافتراض اسمه models.admin.py, ، يمكنك القيام به

import imp
with open('models.admin.py', 'rb') as fp:
    models_admin = imp.load_module(
        'models_admin', fp, 'models.admin.py',
        ('.py', 'rb', imp.PY_SOURCE)
    )

ولكن قراءة المستندات على imp.find_module و imp.load_module قبل البدء في استخدامه.

نصائح أخرى

اذا أنت حقا ترغب في ذلك، يمكنك استيراد وحدة نمطية مع اسم ملف غير عادي (على سبيل المثال، اسم ملف يحتوي على "." قبل ".py") باستخدام وحدة IMP:

>>> import imp
>>> a_b = imp.load_source('a.b', 'a.b.py')
>>> a_b.x
"I was defined in a.b.py!"

ومع ذلك، هذه فكرة سيئة بشكل عام. من المرجح أن تحاول استخدام الحزم، وفي هذه الحالة يجب عليك إنشاء دليل يدعى "a"، يحتوي على ملف باسم "B.py"؛ ثم "استيراد AB" سيتم تحميل A / B.PY.

يسمى الملف models/admin.py. (مصدر)

وهذا هو، يجب أن يسمى admin.py في دليل يسمى models.

ثم يمكنك استيراد استخدام from models.admin import *, ، على افتراض أنه في طريق ثعبان الخاص بك.

لا، لا يمكنك استيراد ملف Python كوحدة نمطية إذا كان اسمه يحتوي على فترة (أو علامة استفهام، أو علامة تعجب، إلخ). يجب أن يكون اسم وحدة نمطية Python (لا يشمل الأمر .py) اسم ثعبان صالح (أي يمكن استخدامه كاسم متغير).

أنت لا ترجع الملفات في بيان الاستيراد ، يتم الرجوع وحدات و حزم.

يرجى قراءة مستندات, ، فهي واضحة جدا في هذا الشأن.

على أي حال ، منذ كنت تستخدم جانغو, النهج المعتاد لن تعمل.إذا كنت تريد أن تبقي نماذج في ملفات منفصلة, وليس في models.py عليك أن تتخذ مزيدا من الخطوات المحددة ، على سبيل المثال ، هنا.

تحرير:
حسنا, أنا لا أعرف حقا ما questioneer يعني عندما يذكر المشرف وعما إذا كان أو لم يكن هو ذات الصلة إلى واجهة الادارة جانغو.النقاط لا تزال قائمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top