2009-02-26 5 views
5

파일의 이름을 변경해야만 가능합니까? 또는 파일 이름을 정의하기 위해 파일에 __module__ 변수가 있습니까?파이썬 모듈 이름을 변경하는 방법은 무엇입니까?

+0

파일의 이름을 바꾸는 데 문제가 있습니까? 왜 작품의 이름을 변경하지 않겠습니까? –

+0

사실, 그것은 게으름이었습니다 ... 나는 Launchpad에서 파일을 제거하고 다시 추가하고 싶지 않았습니다. – Rodrigo

답변

8

예. 파일의 이름을 변경해야합니다. 시스템에서 컴파일 된 파일 (있는 경우) oldname.pycoldname.pyo을 제거한 후 최선을 다하십시오. 그렇지 않으면 이전 이름으로도 모듈을 가져올 수 있습니다.

0

모든 클래스에는 __module__ 속성이 있습니다.하지만이 클래스를 변경해도 클래스의 네임 스페이스는 변경되지 않습니다.

가능하면 코드를 매우 쉽게 혼란에 빠뜨릴 위험이 있지만 setattr을 사용하여 메소드 또는 클래스를 원하는 모듈에 삽입해야합니다.

가장 좋은 방법은 파일의 이름을 바꾸는 것입니다.

0

어디서 __module__ 변수를 갖고 싶으므로 원본 스크립트에서 가져올 항목을 알고 있습니까? 모듈은 파일 이름으로 인식되고 sys.path 변수에 정의 된 경로를 조사합니다.

따라서 파일의 이름을 바꾼 다음 oldname.pyc을 제거하고 모든 것이 올바르게 작동하는지 확인해야합니다.

17

당신이 정말로 파일 계산서를 수입 newname의 '와'oldname.py '를 가져올 경우, 가능하게 트릭이 : 가져 오기 이전 이름을 가진 곳 모듈 다음 sys.modules에 주입 새로운 이름으로. 후속 import 문은 새 이름으로도 찾습니다. 코드 샘플 :

# this is in file 'oldname.py' 
...module code... 

사용법 : 이제

# inject the 'oldname' module with a new name 
import oldname 
import sys 
sys.modules['newname'] = oldname 

할 수 있습니다 어디서나 import newname와 모듈.

import foo as bar 
print bar.baz 
+0

내가 할 수있는 상황을 생각할 수는 없지만 다음과 같이하면 멋지다. – technomalogical

+1

한 가지 상황 : 파이썬 2.6과 2.7 모두와의 호환성을 원하지만 새로운 2.7을 사용하고자하는 프로젝트 unittest 기능. 이 트릭을 사용하면 새로운 기능을 사용하면서 코드를'import unittest '를 사용하면되므로 파이썬 버전을 전환 할 때마다 import 문을 수정할 필요가 없습니다. – Tobi

11

당신은 사용하여 가져올 때 모듈에 사용되는 이름을 변경할 수 있습니다. 따라서 파일의 이름을 변경하지 않고 이름을 변경하는 일은 없습니다. 그러나 물론 당신은 할 수 있습니다 :

import module_name as new_module_name 

또는

import module_name.submodule.subsubmodule as short_name 

유용한 예를. DB 코드 작성 용.

import sqlite3 as sql 
sql.whatever.. 

그런 다음 예를 들어 전환하십시오. sqlite3 to pysqlite 방금 ​​가져 오기 라인을 변경하십시오.

1

당신이 import module_name을 수행 할 때 파이썬 인터프리터가 파일 PYTHONPATH에 module_name.extension을 찾습니다

0

나는 bsddb와 같은 문제가있었습니다. bsddb3 모듈을 설치해야했지만 수백 개의 스크립트가 bsddb를 가져 왔습니다. 모두에서 가져 오기를 변경하는 대신 bsddb3 난자를 추출하고 site-packages 디렉토리에 소프트 링크를 만들어 "bsddb"와 "bsddb3"모두를 파이썬과 동일하게 만들었습니다.

관련 문제