Mengapa impor absolut tidak dapat menemukan modul saya?

Saya memiliki proyek Python 2.7 yang terlihat seperti ini:

proyek saya\

- __init__.py
- __main__.py
- foo.py

Saya ingin menggunakan impor absolut, seperti yang diwajibkan oleh PEP 8, tetapi ketika saya mencoba melakukan ini di __main__.py:

from myproject.foo import bar

Dengan python -m myproject

Saya mendapat:

ImportError: Tidak ada modul bernama myproject.foo

Apa yang saya lakukan salah?


person Sean W.    schedule 30.09.2013    source sumber
comment
Apa yang Anda lakukan secara spesifik yang menyebabkan pengecualian tersebut? python -m myproject? Jika demikian, silakan edit pertanyaan Anda dengan informasi itu   -  person Ian Stapleton Cordasco    schedule 30.09.2013
comment
Ya. Saya telah mengedit pertanyaannya.   -  person Sean W.    schedule 30.09.2013


Jawaban (2)


Setelah googling lagi ternyata, semuanya Yang perlu saya lakukan adalah menambahkan:

from __future__ import absolute_import

Ini menambahkan beberapa pembuktian masa depan untuk Python 3. Perhatikan bahwa PyDev tidak dapat menemukan modul dengan cara ini. Saya akan membuka pertanyaan terpisah untuk itu.

person Sean W.    schedule 30.09.2013
comment
Mungkin ingin menyebutkan dalam pertanyaan Anda bahwa Anda menggunakan Python 2.x (dan beri tag juga, untuk relevansi) - person Wayne Werner; 30.09.2013

Agar bisa berfungsi, myproject harus berada di jalur Python Anda. Anda dapat melakukannya secara eksternal dengan mengatur variabel PYTHONPATH, atau di dalam program dengan menambahkannya ke sys.path.

(Perhatikan bahwa tidak ada konvensi untuk menggunakan nama garis bawah ganda pada selain __init__.py. __main__.py Anda sepertinya nama yang sangat aneh.)

person Daniel Roseman    schedule 30.09.2013
comment
__main__dipahami oleh python ketika Anda python -m sebuah paket. - person SingleNegationElimination; 30.09.2013
comment
Saya menggunakan __main__.py karena Python mencarinya ketika python myproject dijalankan. - person Sean W.; 30.09.2013
comment
Keren, entah kenapa saya belum pernah menemukan itu sebelumnya. - person Daniel Roseman; 30.09.2013
comment
__main__.py juga memungkinkan Anda untuk meng-zip proyek Anda ke myproject.zip (atau apa pun) dan menjalankan python myproject, @DanielRoseman - person Wayne Werner; 30.09.2013
comment
@WayneWerner Terima kasih! Saya tidak mengetahuinya! - person Sean W.; 30.09.2013