Python 모듈 가져오기 메커니즘과 대규모 프로젝트의 사양을 알아보세요.
Python Video Tutorial 칼럼에서는 오늘 Python 모듈 가져오기 메커니즘과 대규모 프로젝트의 사양을 배울 수 있는 방법을 소개합니다.
머리말
우리는 일상적인 프로젝트에서 Python을 사용하는 과정에서 각 모듈의 가져오기 문제를 해결해야 하는 경우가 많고 참조 경로 찾기, 모듈 교차 가져오기 등과 같은 문제에 자주 직면합니다. , 그래서 이 글을 썼습니다. 이 글은 Python의 모듈 가져오기 메커니즘과 일상적인 대규모 프로젝트에서 따라야 할 모듈 가져오기 사양을 설명하는 것을 목표로 합니다
Python 모듈 가져오기
일상 프로그래밍에서 작성된 코드 로직을 재사용하기 위해 우리는 코드를 모듈로 캡슐화하여 개발 효율성을 향상시키기 위해 필요할 때 직접 가져오고 재사용할 수 있습니다. 모듈은 함수, 클래스, 변수를 정의할 수 있으며 실행 가능한 코드를 포함할 수도 있습니다. 모듈 소스에는 세 가지 유형이 있습니다. ①Python 내장 모듈(표준 라이브러리); ②타사 모듈; ③사용자 정의 모듈;
가져오기 원칙
모듈 가져오기는 일반적으로 파일 헤더의 import 키워드를 사용하여 수행됩니다. 모듈 가져오기는 가져온 모듈을 한 번 실행한 다음 다음을 사용하여 이 네임스페이스에 모듈을 생성하는 것과 같습니다. 가져온 모듈 모듈 네임스페이스의 연결은 이 네임스페이스에 새 변수를 생성하는 것과 동일합니다. 이 변수의 이름은 가져온 모듈의 이름이며 가져온 모듈의 네임스페이스를 가리킵니다. 따라서 가져온 모듈은 변수와 동일합니다. 따라서 동일한 모듈을 여러 번 가져오는 것은 처음 가져올 때만 실행됩니다. (이후 가져오기에서는 이 모듈 변수가 이미 존재하는 것으로 확인되어 실행되지 않습니다.)
경로 검색 메커니즘
가져온 모든 모듈은 Python의 내장 사전 sys.modules에 저장됩니다. Python이 시작되자마자 메모리에 로드됩니다. 새 모듈을 가져오면 sys.modules가 자동으로 로드됩니다. 모듈을 기록합니다. Python의 모듈 검색 경로 메커니즘은 다음과 같습니다.
- 모듈이 sys.path의 모든 경로에 있는지 확인하고, 그렇다면 모듈을 로드할 새 공간을 엽니다.
- 내장 패키지가 있는지 확인합니다. 또는 sys.modules에 설치되었습니다. 설치된 타사 패키지는 모듈을 로드할 수 있는 새로운 공간을 열어줍니다.
따라서 우리가 직접 작성한 모듈의 경우 캡슐화되어 PyPi에 게시되면 직접 설치할 수 있습니다. pip를 설치하면 시작 시 메모리에 로드됩니다. sys.modules를 통해 볼 수 있습니다. 이 프로젝트에서 재사용만 필요한 모듈의 경우 재사용 코드의 sys.path에 해당 경로를 추가하고 모듈도 참조할 수 있습니다.
절대 경로 가져오기
모든 모듈 가져오기는 "루트 노드"에서 시작됩니다. 루트 노드의 위치는 sys.path의 경로에 따라 결정됩니다. 프로젝트의 루트 디렉터리는 일반적으로 sys.path에 자동으로 지정됩니다. 프로그램이 모든 곳에서 실행되도록 하려면 sys.path
import sys,os BASE_DIR = os.path.dirname(os.path.abspath(__file__))#项目根目录所在的绝对路径sys.path.append(BASE_DIR)import A, B #导入A、B包复制代码
상대 경로 가져오기
수동으로 수정해야 합니다. 현재 디렉터리를 기준으로 모듈 위치만 신경 쓰면 됩니다. 패키지 내에서 직접 실행할 수 없습니다(오류가 보고됩니다). 루트 노드가 어디에 있든 패키지 내 모듈의 상대적 위치는 정확합니다.
#from . import b2 #这种导入方式会报错,只有在包内部直接执行的时候才可以这样导入。import b2#正确b2.print_b2()复制代码
Python 모듈 가져오기에 대해 자주 묻는 질문
- 패키지 이름을 개별적으로 가져올 때 패키지에 포함된 모든 하위 모듈을 가져오지 않습니다. 해결 방법: 가져온 패키지에는 다른 패키지의 가져오기도 포함되어 있습니다. 이때 각 패키지의 init.py 파일에서 해당 패키지 아래의 모든 모듈을 가져와야 합니다. 최상위 계층만 하위 패키지의 클래스를 직접 참조할 수 있습니다. . 및 방법
init 파일
폴더 아래에 init.py가 있으면 해당 폴더가 패키지이고 그 아래에 여러 모듈이 전체를 형성하며 이러한 모듈을 다른 모듈로 가져올 수 있음을 의미합니다. 동일한 패키지를 통해 코드를 작성합니다. 그 중 init.py 파일은 다양한 모듈 간의 참조 관리를 용이하게 하고 패키지 가져오기 동작을 제어하기 위해 패키지를 구성하는 데 사용됩니다.
파일에는 내용이 포함될 수 없습니다. 즉, 빈 파일입니다(비어 있으면 가져오기 [패키지] 형식을 사용하는 것만으로는 아무 작업도 수행할 수 없습니다). 이는 표시와 동일합니다. .
python3에서는 패키지 아래에 init.py 파일이 없더라도 가져오기 패키지는 여전히 오류를 보고하지 않습니다. python2에서는 파일이 패키지 아래에 있어야 합니다. 그렇지 않으면 가져오기 패키지에서 오류를 보고합니다.
allvariables
all은 이 패키지를 가져올 때 [현재 범위]로 가져올 모듈을 지정하는 데 사용되는 중요한 변수입니다*. all 목록에 없는 모듈은 다른 프로그램에서 참조되지 않습니다. all을 다시 쓸 수 있습니다. 예를 들어 all= ['현재 패키지 모듈 1 이름', '모듈 1 이름'] 이렇게 쓰면 목록에 있는 모듈 이름에 따라 가져옵니다
name变量
在包内部直接运行时,包的name == 'main',但是在外部导入包是,可以通过
if __name__ == '__main__':复制代码
来避免实现包内部调试时的逻辑
循环导入
当两个模块A和B之间相互import时,就会出现循环导入的问题,此时程序运行会报错:can not import name xxx,如:
# a.pyprint('from a.py')from b import x y = 'a'复制代码
# b.pyprint('from b.py')from a import y x = 'b'复制代码
我们来分析一下这种错误是怎么出现的:
- 在sys.modules中查找 符号“module b”;
- 如果符号“module b”存在,则获得符号“module b”对应的module对象; 从的dict中获得 符号“x”对应的对象。如果“x”不存在,则抛出异常“ImportError: cannot import name ‘x’”
- 如果符号“module b”不存在,则创建一个新的 module对象。不过此时该新module对象的dict为空。然后执行module b.py文件中的语句,填充的dict。
因此在a.py中执行from b import x的顺序就是1->3,先引入b,b里面from a import y由相当于执行了a.py,顺序是1->2,因为此时b已经引入所以不会执行3,2中无法找到x对象,因为引入b时还没执行到x='b'这一步,所以报错了
解决办法
- 延迟导入,把import语句写在方法/函数里,将它的作用域限制在局部;
- 顶层先引入模块,再把from x import y改成import x.y形式;
- 其实出现循环引用问题的根本原因是程序设计不合理,每个包都应该由上层使用的模块去导入,而不应该在包与包之间各种相互导入,所以应该更改代码布局,可合并或分离竞争资源;
大型项目中Python模块导入规范
分离模块,将同一类别的模块放在同一目录下,形成类别分明的目录架构,如:
- 每一个模块目录都要写init.py文件,可以同时定义all限定可导入的范围;
- 源码根目录可以定义BASE_DIR,限定好根目录路径,启动py文件可以用绝对路径导入各个模块,将必要模块都加入到sys.path中;
- 各个服务之间(例如model需要引入common的模块方法),可以通过相对路径引用模块;
- 程序设计时避免循环导入,可由调用者(服务文件)作为上层第三方引入需要的各个模块,这样就可以减少各个模块的相互导入。
更多相关免费学习推荐:python视频教程
위 내용은 Python 모듈 가져오기 메커니즘과 대규모 프로젝트의 사양을 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

VS 코드는 파이썬을 작성하는 데 사용될 수 있으며 파이썬 애플리케이션을 개발하기에 이상적인 도구가되는 많은 기능을 제공합니다. 사용자는 다음을 수행 할 수 있습니다. Python 확장 기능을 설치하여 코드 완료, 구문 강조 및 디버깅과 같은 기능을 얻습니다. 디버거를 사용하여 코드를 단계별로 추적하고 오류를 찾아 수정하십시오. 버전 제어를 위해 git을 통합합니다. 코드 서식 도구를 사용하여 코드 일관성을 유지하십시오. 라인 도구를 사용하여 잠재적 인 문제를 미리 발견하십시오.

VS 코드는 Windows 8에서 실행될 수 있지만 경험은 크지 않을 수 있습니다. 먼저 시스템이 최신 패치로 업데이트되었는지 확인한 다음 시스템 아키텍처와 일치하는 VS 코드 설치 패키지를 다운로드하여 프롬프트대로 설치하십시오. 설치 후 일부 확장은 Windows 8과 호환되지 않을 수 있으며 대체 확장을 찾거나 가상 시스템에서 새로운 Windows 시스템을 사용해야합니다. 필요한 연장을 설치하여 제대로 작동하는지 확인하십시오. Windows 8에서는 VS 코드가 가능하지만 더 나은 개발 경험과 보안을 위해 새로운 Windows 시스템으로 업그레이드하는 것이 좋습니다.

VS 코드 확장은 악의적 인 코드 숨기기, 취약성 악용 및 합법적 인 확장으로 자위하는 등 악성 위험을 초래합니다. 악의적 인 확장을 식별하는 방법에는 게시자 확인, 주석 읽기, 코드 확인 및주의해서 설치가 포함됩니다. 보안 조치에는 보안 인식, 좋은 습관, 정기적 인 업데이트 및 바이러스 백신 소프트웨어도 포함됩니다.

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.

PHP는 1994 년에 시작되었으며 Rasmuslerdorf에 의해 개발되었습니다. 원래 웹 사이트 방문자를 추적하는 데 사용되었으며 점차 서버 측 스크립팅 언어로 진화했으며 웹 개발에 널리 사용되었습니다. Python은 1980 년대 후반 Guidovan Rossum에 의해 개발되었으며 1991 년에 처음 출시되었습니다. 코드 가독성과 단순성을 강조하며 과학 컴퓨팅, 데이터 분석 및 기타 분야에 적합합니다.

vs 코드에서는 다음 단계를 통해 터미널에서 프로그램을 실행할 수 있습니다. 코드를 준비하고 통합 터미널을 열어 코드 디렉토리가 터미널 작업 디렉토리와 일치하는지 확인하십시오. 프로그래밍 언어 (예 : Python의 Python Your_file_name.py)에 따라 실행 명령을 선택하여 성공적으로 실행되는지 여부를 확인하고 오류를 해결하십시오. 디버거를 사용하여 디버깅 효율을 향상시킵니다.
