Saya sedang mengerjakan proyek Python dengan struktur folder dasar yang tercantum di bawah ini, dan contoh isi setiap file Python ada dalam tanda kurung kurawal.

|   generate_recommendations.py
├───.ipynb_checkpoints
├───.vscode
├───csv
├───dao
|   |   ratingDAO.py { contains a class named RatingDAO }
│   ├───config
│   ├───core
|   |       rating.py { contains a class named Rating }
│   ├───db

TUJUAN: Saya ingin mengimpor rating.py di ratingDAO.py, dan sebaliknya ingin mengimpor ratingDAO.py ke generate_recommendations.py, dan semua impor berfungsi.

Saya telah menambahkan pernyataan impor berikut di file ratingDAO.py

from core.rating import Rating

Dan saya juga telah menambahkan pernyataan impor berikut di file generate_recommendations.py

from dao.ratingDAO import RatingDAO

Ketika saya menjalankan ratingDAO.py, itu berjalan tanpa kesalahan.

Tetapi ketika saya mencoba menjalankan generate_recommendations.py, saya mendapatkan kesalahan berikut:

Traceback (most recent call last):
  File "generate_recommendations.py", line 3, in <module>
    from dao.ratingDAO import RatingDAO
  File "D:\MEGASync\BSc Computer\Research Papers\recommendation-engine\dao\ratingDAO.py", line 3, in <module>
    from core.rating import Rating
ModuleNotFoundError: No module named 'core'

Saya tidak dapat menyelesaikan kesalahan. Saya telah melihat sekitar sepuluh posting di StackOverflow terkait dengan impor bersarang tetapi saya tidak dapat menemukan contoh di mana penulis mencoba mengimpor dua level.

Jika impor seperti itu tidak dimungkinkan dengan Python, saya terbuka untuk ide tentang bagaimana saya harus mengelola file dalam proyek Python saya.

Di Jawa, saya akan menggunakan struktur folder berikut,

├───recommendation
|   |   GenerateRecommendations.java
│   ├───core
|   |     Rating.java
│   └───dao
|         RatingDAO.java 

Dan menggunakan kode berikut untuk mengimpor Rating.java di RatingDAO.java,

import recommendation.core.Rating;

Dan menggunakan kode berikut untuk mengimpor RatingDAO.java ke GenerateRecommendations.java

import dao.RatingDAO;

Dan semuanya akan berhasil, tetapi hal yang sama tidak berfungsi untuk Python itulah sebabnya saya memilih struktur folder awal yang ditentukan.

P.S Ini adalah pertama kalinya saya mengajukan pertanyaan tentang StackOverflow. Saya mencoba yang terbaik untuk menggambarkan masalah saya dengan merujuk ke posting lain. Mohon maaf sebelumnya jika tidak sesuai dengan standar pertanyaan yang baik.

Berharap untuk balasan! :-)

3
Ranajoy Saha 24 Maret 2020, 23:23

1 menjawab

Jawaban Terbaik

Saat Anda menjalankan python generate_recommendations.py ini menempatkan direktori skrip di jalur (sys.path yang mencari modul saat mengimpor). Ketika Anda menggunakan from core.rating import Rating di ratingDAO.py maka itu akan mencari jalur untuk paket yang disebut core tetapi karena direktori dao tidak ada di jalur itu tidak dapat ditemukan.

Solusinya adalah dengan menggunakan impor relatif dalam modul ratingDAO.py:

from .core.rating import Rating

Dengan cara ini ia akan mencari relatif ke lokasinya sendiri untuk paket core. Jika Anda ingin menjalankan ratingDAO.py dari direktori tingkat atas, Anda dapat melakukannya melalui python -m dao.ratingDAO (ini menempatkan direktori kerja saat ini di jalur dan kemudian mencari sys.path untuk modul yang disebut dao.ratingDAO dan menjalankannya).

Atau Anda dapat menggunakan impor absolut relatif terhadap direktori hierarki tingkat atas:

from dao.core.rating import Rating
2
a_guest 24 Maret 2020, 20:47