2017-12-31 198 views
-1

개체 지향 프로그래밍을 사용하여 프로젝트를 시작했지만 경로에 대한 몇 가지 기본 규칙을 이해하는 데 어려움이 있습니다. 여기 Python 경로 규칙

내 프로젝트의 arborescence의 :의

Project/ 
    main.py 
    classes/ 
     Database.py 
    database/ 
     Project.db 

main.py

import sys 
sys.path.insert(0, 'classes/') 
from Database import Database 

Database.py는

import sys 
sys.path.insert(0, '../database/') 
import sqlite3 

# in my Database class 
def connect(self): 
    self.conn = sqlite3.connect('database/{}.db'.format(self.name)) 
    self.c = self.conn.cursor() 

인스턴스화 내가 main.py 파일의 인스턴스를 만들고 난 Database.py 파일에 아무것도 변경할 필요가 없습니다 다음을 실행하면

ProjectDatabase = Database('Project') 
ProjectDatabase.connect() 

Database.py에서 main.py VS.

그러나, 나는 Database.py 파일의 인스턴스를 만들고 나는이에 연결 방법을 변경해야 다음을 실행하는 경우 : 내가 그렇게해야하는 이유

def connect(self): 
    self.conn = sqlite3.connect('../database/{}.db'.format(self.name)) 
    self.c = self.conn.cursor() 

이해가 안와 main.py 파일에서 인스턴스화를하면 Database.py의 sys.path.insert() 명령을 변경하지 않아도됩니다 ... sys.path.insert ('database/') 대신?

내가 여기서 명확하게되기를 바란다. 나는 우리가 어떤 스크립트를 실행할 것인지에 따라 스크립트 내에서 경로를 작성하는 방법을 알지 못한다. 주요 프로그램.

설명해 주셔서 감사합니다.

+0

https://docs.python.org/3/tutorial/modules.html#packages – jonrsharpe

답변

0

main.py에서 초기화하는 경우 main.py 파일의 디렉토리가 프로그램 인스턴스의 루트가됩니다. 따라서 파일에 대한 모든 참조는 main.py 파일이있는 디렉토리에서 시작됩니다.

database.py에서 초기화하면 데이터베이스 폴더 디렉토리가 프로그램 인스턴스의 루트 디렉토리가되고 데이터베이스 폴더 디렉토리에 따라 다른 모든 파일을 참조해야합니다.

희망이 도움이됩니다.

+0

내 스크립트 main.py를 실행하면 다른 파일 (및 다른 파일), 내 main.py 스크립트가 포함 된 폴더에서 지정해야합니다 (Project/폴더에서 지정된 의미). 그러나 Database.py 스크립트를 실행하면 클래스/폴더가 내 프로그램의 루트가되므로 모든 것이 여기에서 지정되어야합니다. 권리 ? 그것은 왜 main.py를 실행할 때 sys.path.insert ('../ database /')를 Database.py 시작 부분에 두어도 sys.path.insert ('database /') 여야합니다.) 이론적으로. 아니 ? – SlickKiss

+0

파일에서 sys.path를 사용할 때마다 시스템 파일 경로 참조를 사용하므로 database.py가 다른 파일에서 시작될 때마다 sys.path는 모든 인스턴스에 대해 database.py 폴더를 참조합니다. 따라서 ../database를 지정하여 classes 폴더의 데이터베이스 폴더로 되돌아 가야합니다. import.py를 사용하여 database.py에서 필요한 모듈을 가져 오는 것이 좋습니다. 예 : "import classes.database" –

+0

정말 이해가 가지 않습니다. 이 문제에 관해 이야기하는 온라인 리소스가 있습니까? 검색했지만 더 많이 읽으면 이해할 수 있습니다. – SlickKiss