파이썬 패키지 배포를 하면서 알게 된 것. 그것은 바로 프로젝트 !=패키지 != 모듈
PyPI
에서pip install X
,python
에서from Y import Z
X는 프로젝트, Y는 패키지, Z는 모듈. 이렇게 생각하면 편함. 100% 맞는 말은 아님- 패키지는
__init__.py
가 포함된 폴더의 폴더 이름, 그 폴더안에 포함된main.py
같은python
파일
사건의 발단
ypcc 패키지를 설치했는데 왜 import ypcc가 작동을 안하지?
사건의 해답을 찾아서.
그래서 다른 모듈을 살펴 본 결과, setup.py
가 존재하는 디렉토리에 ypcc
라는 폴더를 만들고 __init__.py
를 생성해주면 되지 않을까 라는 결론을 얻었다.
python setup.py bdist_wheel
이렇게 하니 빌드 때부터 기존에 봤던 것 과는 다르게 커맨트창에 나오는 줄의 숫자가 다르다!
(packer) C:\Users\jeakwon\Desktop\git\ypcc>python setup.py bdist_wheel
running bdist_wheel
running build
running build_py
creating build
creating build\lib
creating build\lib\ypcc
copying ypcc\__init__.py -> build\lib\ypcc
installing to build\bdist.win-amd64\wheel
running install
running install_lib
creating build\bdist.win-amd64
creating build\bdist.win-amd64\wheel
creating build\bdist.win-amd64\wheel\ypcc
copying build\lib\ypcc\__init__.py -> build\bdist.win-amd64\wheel\.\ypcc
running install_egg_info
running egg_info
creating ypcc.egg-info
writing ypcc.egg-info\PKG-INFO
writing dependency_links to ypcc.egg-info\dependency_links.txt
writing requirements to ypcc.egg-info\requires.txt
writing top-level names to ypcc.egg-info\top_level.txt
writing manifest file 'ypcc.egg-info\SOURCES.txt'
reading manifest file 'ypcc.egg-info\SOURCES.txt'
writing manifest file 'ypcc.egg-info\SOURCES.txt'
Copying ypcc.egg-info to build\bdist.win-amd64\wheel\.\ypcc-0.7.0-py3.7.egg-info
running install_scripts
adding license file "LICENSE" (matched pattern "LICEN[CS]E*")
creating build\bdist.win-amd64\wheel\ypcc-0.7.0.dist-info\WHEEL
creating 'dist\ypcc-0.7.0-py3-none-any.whl' and adding 'build\bdist.win-amd64\wheel' to it
adding 'ypcc/__init__.py'
adding 'ypcc-0.7.0.dist-info/LICENSE'
adding 'ypcc-0.7.0.dist-info/METADATA'
adding 'ypcc-0.7.0.dist-info/WHEEL'
adding 'ypcc-0.7.0.dist-info/top_level.txt'
adding 'ypcc-0.7.0.dist-info/RECORD'
removing build\bdist.win-amd64\wheel
위쪽부분에 copying build\lib\ypcc\__init__.py -> build\bdist.win-amd64\wheel\.\ypcc
이 부분이 모듈을 생성해주는 부분인가?
twine upload dist\ypcc-0.7.0-py3-none-any.whl
twine을 통해서 업로드까지 해주고
(packer) C:\Users\jeakwon\Desktop\git\ypcc>twine upload dist\ypcc-0.7.0-py3-none-any.whl
Enter your username: jeakwon
Enter your password:
Uploading distributions to https://upload.pypi.org/legacy/
Uploading ypcc-0.7.0-py3-none-any.whl
100%|█████████████████████████████████████████████████████████████████████████████| 6.45k/6.45k [00:00<00:00, 8.03kB/s]
이쯤에서 드는 의문. 폴더이름을 ypcc2
라는 별개의 폴더에 __init__.py를 추가해주면 그것도 모듈이 될까?
결론
- 일단
pip install ypcc
후에 python 에서import ypcc
를 하기 위해서는setup.py
파일이 있는 곳에ypcc
로 폴더를 만들어주고,__init__.py
를 생성해준 뒤에 할 수 있따. - 꼭
PyPI
와 같은 이름일 필요도 없다.ypcc2
로 폴더를 만들면import ypcc2
도 된다.