python - مشكلات الاستيراد التي لم يتم حلها مع PyDev و Eclipse




python-import (7)

أنا جديدة جدا على PyDev و Python ، على الرغم من أنني استخدمت Eclipse لجافا الكثير. أحاول العمل من خلال بعض الأمثلة على الغوص في بايثون ، وهذا يبدو وكأنه مشكلة تافهة للغاية والتي أصبحت مجرد مزعج للغاية. أنا أستخدم نظام التشغيل Ubuntu Linux 10.04.

أريد أن أكون قادراً على استخدام الملف odbchelper.py ، الموجود في الدليل /Desktop/Python_Tutorials/diveintopython/py

إليك ملف example.py الذي أعمل عليه في مشروع PyDev / Eclipse الخاص بي:

import sys
sys.path.append("~/Desktop/Python_Tutorials/diveintopython/py")

هذا يعمل بشكل جيد ، ولكن أريد أن يكون السطر التالي من التعليمة البرمجية:

import odbchelper

وهذا يؤدي إلى خطأ استيراد لم يتم حلها في كل مرة. لقد أضفت ملفات __init__.py إلى كل دليل ممكن ، ولا يساعد أي شيء. لقد حاولت إضافة __init__.py ملفات في وقت واحد إلى مستويات مختلفة من الدلائل بين موقع المشروع وملف odbchelper.py ، ولقد حاولت أيضًا إضافة ملفات __init__.py إلى جميع الدلائل بين وقت واحد . لا يعمل.

كل ما أريده هو أن يكون لدي مشروع في مكان ما في دليل آخر ، مثلا /Desktop/MyStuff/Project ، والذي به example.py ... ثم من example.py أريد استيراد odbchelper.py من /Desktop/Python_Tutorials/diveintopython/py/

كل رد من لوحة الرسائل يمكنني العثور على مجرد استخدام الدالة sys.path.append() لإضافة هذا الدليل إلى المسار الخاص بي ، ثم استيراده ... ولكن هذا بالضبط ما أفعله في شفرتي ولا يعمل .

لقد حاولت أيضا خد Ctrl - 1 لمنع رسالة الخطأ ، ولكن البرنامج لا يزال لا يعمل بشكل صحيح. أحصل على خطأ ، ImportError: No module named odbchelper . لذا من الواضح أنه لا يتم إضافة المسار ، أو أن هناك بعض المشاكل التي لم يتم تسجيلها في جميع نسختي المتعددة من إضافة ملفات __init__.py .

إنه أمر محبط للغاية أن شيئًا بسيطًا مثل ... استدعاء أشياء من ملف موجود في مكان آخر على جهازي ... يتطلب هذا الجهد الكبير.


أنا أستخدم كسوف كبلر 4.3 ، PyDev 3.9.2 وعلى بلدي أوبونتو 14.04 واجهت نفس المشكلة. حاولت وقضيت ساعات ، مع كل ما سبق من بين الخيارات ولكن دون جدوى. ثم جربت ما يلي الذي كان رائعا:

  • حدد Project -> RightClick-> PyDev -> إزالة PyDev Project Config
  • ملف-> إعادة التشغيل

وكنت أستخدم Python 2.7 كمترجم ، على الرغم من أنه لا يؤثر ، على ما أعتقد.


أنا أعمل Eclipse 4.2.0 (Juno) و PyDev 2.8.1 ، وركضنا في هذه المشكلة مع lib مثبت على مسار حزم الموقع. وفقا لهذا السؤال SO:

Pydev و * .pyc الملفات

... هناك مشكلة في ملفات PyDev و pyc. في حالة lib معينة حاولت الإشارة ، كل ما يتم تسليمه هو ملفات pyc.

هذا ما فعلته لمعالجة هذا:

  1. قم بتثبيت uncompyle2 من https://github.com/Mysterie/uncompyle2
  2. قم بتشغيل uncompyle2 مقابل ملفات * .pyc في lib موقع حزم. مثال:

    uncompyle2 -r -o / tmp / path / to / site-packages / lib

  3. إعادة تسمية الملفات * .pyc_dis الناتجة المنتجة من uncompyle2 إلى * .py
  4. انقل / انسخ هذه الملفات * .py إلى مسار حزم المواقع
  5. في Eclipse ، حدد File> Restart

يجب أن تختفي الآن أخطاء الاستيراد التي لم يتم حلها والمتعلقة بملفات .pyc.


في خصائص مشروع pydev ، يوجد جزء يسمى "PyDev - PYTHONPATH" ، مع جزء فرعي يسمى "المكتبات الخارجية". يمكنك إضافة مجلدات المصدر (أي مجلد يحتوي على __init__.py ) إلى المسار باستخدام هذا الجزء. سيصبح كود مشروعك قادرًا على استيراد وحدات من مجلدات المصدر هذه.


لقد أصلحت pythonpath وكان كل شيء مدهش عندما قمت باستيراد الأشياء من خلال وحدة التحكم ، ولكن كل هذه الواردات التي لم تحل من قبل كانت لا تزال تحمل علامة أخطاء في الكود ، بغض النظر عن عدد المرات التي قمت فيها بإعادة تشغيل الكسوف أو تحديث / تنظيف المشروع.

أنا الحق في النقر فوق المشروع-> Pydev-> إزالة علامات الخطأ وتخلصت من تلك المشكلة. لا تقلق ، إذا كانت شفرتك تحتوي على أخطاء فعلية ، فستتم إعادة تعيينها.


هنا هو ما عملت بالنسبة لي (sugested بواسطة soulbit):

1) Restart using restart from the file menu
2) Once it started again, manually close and open it.

هذا هو أبسط حل على الإطلاق ويزيل الشيء المزعج تمامًا.


هناك طريقتان لحل هذه المشكلة:

  • احذف مترجم Python من "Python interpreters" وأضفه مرة أخرى.
  • أو قم فقط بإضافة المجلد مع المكتبات في المترجم الذي تستخدمه في مشروعك ، وفي حالتي كنت أستخدم "زجاجة" وكان المجلد الذي أضفته هو "c: \ Python33 \ Lib \ site-packages \ bottle-0.11.6 -py3.3.egg "

الآن لا أرى الخطأ بعد الآن ، وتعمل ميزة إكمال الشفرة أيضًا مع "زجاجة".


KD.py

class A:
a=10;

KD2.py 
from com.jbk.KD import A;
class B:
  b=120;

aa=A();
print(aa.a)

هذا يعمل بشكل مثالي بالنسبة لي

مثال آخر هو

main.py
=======
from com.jbk.scenarios.objectcreation.settings import _init
from com.jbk.scenarios.objectcreation.subfile import stuff

_init();
stuff();

settings.py
==========
def _init():
print("kiran")


subfile.py
==========
def stuff():
print("asasas")    






python-import