최근에 pyc 파일을 보지 않으면python3에서pycache로 격리되면

3316 단어 Python3Python
python을 만질 때.
"어...? 요즘 pyc 파일 안 봐요?"
알아차렸어.
그리고 스타일에 큰 변화가 생겨서 (낡았지만) 써 봤어요.

pyc 파일


정부측은 이런 설명을 쓰고 있다.
CPython compiles its source code into "byte code", and for performance reasons, it caches this byte code on the file system whenever the source file has changes. This makes loading of Python modules much faster because the compilation phase can be bypassed. When your source file is foo.py, CPython caches the byte code in a foo.pyc file right next to the source.
세 줄로 정리하면
  • import의 원본 코드는 수시로 컴퓨터에서 쉽게 읽을 수 있는 바이너리 파일로 컴파일됩니다
  • 바이너리 파일의 불러오는 속도가 매우 빨라집니다
  • 바이너리 파일은 이 파일 옆에 pyc 파일로 만들어집니다
  • 쓰여 있다.(대략)
    따라서 읽기 속도를 높이는 역할을 한다.

    pyc 파일을 만들어 보세요!

     ├─ a.py
     ├─ b.py
     └─ c.py
    
    a.py
    import b
    import c
    
    b.hello()
    c.goodmorning()
    
    b.py
    def hello():
        print("hello")
    
    c.py
    def goodmorning():
        print("goodmorning")
    

    결과

    hello
    goodmorning
    
    $ ls
    a.py        b.py        b.pyc       c.py        c.pyc
    
    
    pyc 파일이 진행 중입니다.

    pyc 행방의 진실


    하지만 언제부터인지 이 pyc 파일은 옆에서 만들 수 없습니다.


    그렇게 생각하지만 그런 일은 없어요.
    python3.2부터 저장 위치가 변경되었다고 합니다.
    이 새 파일들이 원본 디렉터리에 함부로 놓여 있지 않도록 pyc 파일은 패키지 디렉터리에 있는'pycache'디렉터리에 수집됩니다.
    응응, 확실히 원본 코드를 찾는 것은 이중적이어서 보기 흉해.
    그래서 관리 방법을 바꿨어요.

    새 pyc 파일 확인


    이번에는 같은 파일 구성으로python3.2에서 확인(위는 2.7에서 시도한 것입니다.)
     ├─ a.py
     ├─ b.py
     └─ c.py
    
    a.py
    import b
    import c
    
    b.hello()
    c.goodmorning()
    
    b.py
    def hello():
        print("hello")
    
    c.py
    def goodmorning():
        print("goodmorning")
    

    결과

    $ ls
    __pycache__ a.py        b.py        c.py
    $ ls __pycache__/
    b.cpython-37.pyc    c.cpython-37.pyc
    
    이렇게 pycache/부하.pyc가 생성되었습니다!

    좋은 웹페이지 즐겨찾기