Language/Python

Python - pipenv 설정 및 사용

TechNote.kr 2021. 6. 27. 22:02
  • 기본 python 환경과 별도로 사용할 수 있는 가상 환경 제공
  • 원하는 python 버전을 설정하여 사용
  • 해당 가상 환경만을 위한 python library 를 설치
  • Pipfile, Pipfile.lock (pip 설정 파일) 을 기반으로 python library 일괄 설치
  • pyinstaller 사용하여 변환시 꼭 필요한 library 만으로 최적화 변환 :
    pipenv 없이 pyinstaller로 exe 실행 환경 생성할 경우 기본 python 환경에서 수행시 설치된 python library 를 기준으로 생성하기 때문에 불필요한 library 들로 인해 변환 용량이 커짐. pipenv 를 사용하여 필요한 library 만 설치한 환경 이용시 최적화하여 변환 가능.

pipenv Github : https://github.com/pypa/pipenv

pipenv pypi : https://pypi.org/project/pipenv


pipenv 설치

PS D:\workspace\cef-pywebview> pip install pipenv 
Collecting pipenv
..........
Installing collected packages: six, filelock, distlib, appdirs, virtualenv-clone, virtualenv, certifi, pipenv
Successfully installed appdirs-1.4.4 certifi-2021.5.30 distlib-0.3.2 filelock-3.0.12 pipenv-2021.5.29 six-1.16.0 virtualenv-20.4.7 virtualenv-clone-0.5.4

pipenv 는 pip를 이용하여 설치하고 설치시 의존성을 가진 관련 library 들 또한 같이 설치 된다.


가상 환경에서 사용할 python 설정

PS D:\workspace\cef-pywebview> pipenv --python 3.8 
Creating a virtualenv for this project...
Pipfile: D:\workspace\cef-pywebview\Pipfile
Using D:/Python38/python.exe (3.8.10) to create virtualenv...
[=   ] Creating virtual environment...created virtual environment CPython3.8.10.final.0-64 in 4713ms
  creator CPython3Windows(dest=C:\Users\User\.virtualenvs\cef-pywebview-wVQHrn4L, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\User\AppData\Local\pypa\virtualenv)
    added seed packages: pip==21.1.2, setuptools==57.0.0, wheel==0.36.2
  activators BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

Successfully created virtual environment!
Virtualenv location: C:\Users\User\.virtualenvs\cef-pywebview-wVQHrn4L
Creating a Pipfile for this project...

가상 환경을 구축할 project 로 경로를 이동한 뒤 pipenv --python 명령으로 사용할 python 버전을 3.8 으로 설정하면 python 3.8 기반으로 가상 환경을 생성한다. 위의 경우 기본 python 환경과 별도로 "C:\Users\User\.virtualenvs\cef-pywebview-wVQHrn4L" 에 가상 환경이 생성되었다.

PS D:\workspace\cef-pywebview> pipenv run python --version
Python 3.8.10

위 명령으로 가상환경에서의 python 버전을 확인해보면 앞서 설정한 3.8 인 것을 확인할 수 있다.

pipenv 설정 파일인 Pipfile 이 생성된다.

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]

[dev-packages]

[requires]
python_version = "3.8"

가상 환경에서 사용할 python library 설치

PS D:\workspace\cef-pywebview> pipenv install pywebview    
Installing pywebview...
Adding pywebview to Pipfile's [packages]...
Installation Succeeded
Pipfile.lock not found, creating...
Locking [dev-packages] dependencies...
Locking [packages] dependencies...
           Building requirements...
Resolving dependencies...
Success!
Updated Pipfile.lock (d1c8a0)!
Installing dependencies from Pipfile.lock (d1c8a0)...
  ================================ 0/0 - 00:00:00

예를 들어 pywebview 를 설치할 경우 pipenv install pywebview 명령을 통해 설치하게 된다. 기본 python library 와는 별도로 해당 가상 환경을 위해서만 설치한다. 

C:\Users\User\.virtualenvs\cef-pywebview-wVQHrn4L\Lib\site-packages\pywebview-3.4.dist-info

가상 환경의 기본 경로 하위에 설치된 것을 확인할 수 있고, 가상 환경을 위한 설정 파일인 Pipfile 내에 pywebview 정보가 추가된 것을 확인할 수 있다. 

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
pywebview = "*"

[dev-packages]

[requires]
python_version = "3.8"

현재 설치된 library 는 하기와 같이 확인 가능하다.

PS D:\workspace\cef-pywebview> pipenv graph
pipenv==2021.5.29
  - certifi [required: Any, installed: 2021.5.30]
  - pip [required: >=18.0, installed: 21.1.2]
  - setuptools [required: >=36.2.1, installed: 57.0.0]
  - virtualenv [required: Any, installed: 20.4.7]
    - appdirs [required: >=1.4.3,<2, installed: 1.4.4]
    - distlib [required: >=0.3.1,<1, installed: 0.3.2]
    - filelock [required: >=3.0.0,<4, installed: 3.0.12]
    - six [required: >=1.9.0,<2, installed: 1.16.0]
  - virtualenv-clone [required: >=0.2.5, installed: 0.5.4]
pywebview==3.4
  - pythonnet [required: Any, installed: 2.5.2]
    - pycparser [required: Any, installed: 2.20]

가상 환경에서 python 코드 실행

print("Hello, PIPENV")

위의 내용으로 main.py 를 작성한다. 

PS D:\workspace\cef-pywebview> pipenv run main.py
Hello, PIPENV

pipenv run main.py 명령을 통해 위와 같이 가상 환경 내에서 python code 가 실행되는 것을 확인할 수 있다. 


가상 환경 내로 진입

PS D:\workspace\cef-pywebview> pipenv shell
Launching subshell in virtual environment...
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

새로운 크로스 플랫폼 PowerShell 사용 https://aka.ms/pscore6

PS D:\workspace\cef-pywebview> 

pipenv shell 명령을 통해 가상 환경 속으로 진입할 수 있다. 

PS D:\workspace\cef-pywebview> exit
PS D:\workspace\cef-pywebview> 

기존 환경으로 복귀하려면 exit 를 하면 된다.


pyinstaller 를 이용한 가상 환경 python 코드 exe 변환

PS D:\workspace\cef-pywebview> pipenv run pyinstaller main.py
97 INFO: PyInstaller: 4.3
98 INFO: Python: 3.8.10
129 INFO: Platform: Windows-10-10.0.19042-SP0
130 INFO: wrote D:\workspace\cef-pywebview\main.spec
132 INFO: UPX is not available.
139 INFO: Extending PYTHONPATH with paths
['D:\\workspace\\cef-pywebview', 'D:\\workspace\\cef-pywebview']
150 INFO: checking Analysis
.....
8994 INFO: Appending archive to EXE D:\workspace\cef-pywebview\build\main\main.exe
10125 INFO: Building EXE from EXE-00.toc completed successfully.
10128 INFO: checking COLLECT
10129 INFO: Building COLLECT because COLLECT-00.toc is non existent
10129 INFO: Building COLLECT COLLECT-00.toc
10791 INFO: Building COLLECT COLLECT-00.toc completed successfully.

pipenv 를 통해 pyinstaller를 사용할 경우 가상 환경에 설치된 library 만을 사용하여 변환하기 때문에 꼭 필요한 코드들만 포함하여 exe 실행 환경으로 변환할 수 있다. (즉, 불필요하게 용량이 커지지 않는다.)

pipenv run pyinstaller main.py 와 같이 가상 환경 내에서 변환해주면 된다.