Python 풀스택개발자 삽질로그 내컴 안에 뱀이 들어있다 000. 제발 파이썬 가상환경과 장고(Django) 좀 설치하게 해주세요

2019-12-29 Python Development Environment

문제 발생


노마드코더 에어비앤비 클론강의대로라면 파이썬3과 VScode, 그리고 pipenv 순서대로 깔끔하게 세팅한 뒤 장고(Django)를 설치하면 되는 것이었다. 그러나 내가 그대로 하면 자꾸 저런 식으로 나왔다.


(base) 192:~ spica$ cd Desktop
(base) 192:Desktop spica$ mkdir AirB && cd AirB
(base) 192:AirB spica$ pipenv --three
Creating a virtualenv for this project…
Pipfile: /Users/spica/Pipfile
Using /Users/spica/anaconda3/bin/python3 (3.7.3) to create virtualenv…
⠹ Creating virtual environment...Already using interpreter /Users/spica/anaconda3/bin/python3
Using base prefix '/Users/spica/anaconda3'
Running virtualenv with interpreter /Users/spica/anaconda3/bin/python3

✘ Failed creating virtual environment 
[pipenv.exceptions.VirtualenvCreationException]:   File "/Users/spica/anaconda3/lib/python3.7/site-packages/pipenv/vendor/click/decorators.py", line 17, in new_func
[pipenv.exceptions.VirtualenvCreationException]:       return f(get_current_context(), *args, **kwargs)
[pipenv.exceptions.VirtualenvCreationException]:   File "/Users/spica/anaconda3/lib/python3.7/site-packages/pipenv/cli/command.py", line 208, in cli
[pipenv.exceptions.VirtualenvCreationException]:       clear=state.clear,
[pipenv.exceptions.VirtualenvCreationException]:   File "/Users/spica/anaconda3/lib/python3.7/site-packages/pipenv/core.py", line 574, in ensure_project
[pipenv.exceptions.VirtualenvCreationException]:       pypi_mirror=pypi_mirror,
[pipenv.exceptions.VirtualenvCreationException]:   File "/Users/spica/anaconda3/lib/python3.7/site-packages/pipenv/core.py", line 506, in ensure_virtualenv
[pipenv.exceptions.VirtualenvCreationException]:       python=python, site_packages=site_packages, pypi_mirror=pypi_mirror
[pipenv.exceptions.VirtualenvCreationException]:   File "/Users/spica/anaconda3/lib/python3.7/site-packages/pipenv/core.py", line 935, in do_create_virtualenv
[pipenv.exceptions.VirtualenvCreationException]:       extra=[crayons.blue("{0}".format(c.err)),]
[pipenv.exceptions.VirtualenvCreationException]: Traceback (most recent call last):
  File "/Users/spica/anaconda3/lib/python3.7/site-packages/virtualenv.py", line 420, in copyfile
    os.symlink(os.path.realpath(src), dest)
FileExistsError: [Errno 17] File exists: '/Users/spica/anaconda3/lib/python3.7/lib-dynload' -> '/Users/spica/.local/share/virtualenvs/spica-E-kbpXJS/lib/python3.7/lib-dynload'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/spica/anaconda3/lib/python3.7/site-packages/virtualenv.py", line 2634, in <module>
    main()
  File "/Users/spica/anaconda3/lib/python3.7/site-packages/virtualenv.py", line 870, in main
    symlink=options.symlink,
  File "/Users/spica/anaconda3/lib/python3.7/site-packages/virtualenv.py", line 1162, in create_environment
    install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages=site_packages, clear=clear, symlink=symlink)
  File "/Users/spica/anaconda3/lib/python3.7/site-packages/virtualenv.py", line 1449, in install_python
    copy_required_files(stdlib_dir, lib_dir, symlink)
  File "/Users/spica/anaconda3/lib/python3.7/site-packages/virtualenv.py", line 1356, in copy_required_files
    copyfile(join(src_dir, fn), join(lib_dir, fn), symlink)
  File "/Users/spica/anaconda3/lib/python3.7/site-packages/virtualenv.py", line 423, in copyfile
    copy_file_or_folder(src, dest, symlink)
  File "/Users/spica/anaconda3/lib/python3.7/site-packages/virtualenv.py", line 401, in copy_file_or_folder
    shutil.copytree(src, dest, symlink)
  File "/Users/spica/anaconda3/lib/python3.7/shutil.py", line 321, in copytree
    os.makedirs(dst)
  File "/Users/spica/anaconda3/lib/python3.7/os.py", line 221, in makedirs
    mkdir(name, mode)
FileExistsError: [Errno 17] File exists: '/Users/spica/.local/share/virtualenvs/spica-E-kbpXJS/lib/python3.7/lib-dynload'

Failed to create virtual environment.


니콜라스는 간단하게 설치되는 가상환경이 나는 왜 수십번을 해도 실패하는 것이며, 경로는 왜 Pipfile: /Users/spica/Pipfile 이라고 Desktop과 디렉토리인 AirB가 무시된 상태로 나오는 것인지… 의아한 점이 한 두개가 아니었다.


그래서 자세히 강의를 돌려본 결과, 니콜라스와 내 pipenv 설치과정의 차이점이 뭔가했더니 ‘Using /Users/spica/anaconda3/bin/python3 (3.7.3) to create virtualenv…’ 이 부분이 결정적으로 달랐다.


아나콘다…
아나콘다…
아나콘다?!!! 네가 왜 거기서 나와??! (상상도 못한 정체)


와, 마치 누구에게 뒤통수 세게 맞은듯 아나콘다에게 제대로 후드려 맞은 느낌이었다. 니콜라스의 개발환경에 아나콘다가 있던 없던 그가 어떻게 처리해서 pipenv 설치에 문제가 없었는지 몰라도, 내 컴퓨터 안에는 아나콘다 설치 이전에 파이썬3을 설치한데다, 데이터 사이언스 좀 하겠다고 주피터노트북 깔고 numpy깔고, folium 깔아본다고 miniconda에 무시무시한 anaconda까지 설치하는 바람에 온갖 뱀들이 득실거리게 된 것이다. (심지어 나는 깔아만 놓고 통제는 못하고 있었다.)

이 아나콘다는 파이썬 통합패키지이다 보니까 내가 이미 설치한 파이썬3과는 별개로 파이썬3을 또 디폴트로 갖고 있다. 원래 맥에는 파이썬 2.x 버전이 이미 내장되어 있다. 니콜라스는 파이썬3을 설치하라면서 맥 사용자들 절대로 파이썬2를 지우는 멍청한 짓 말라고 신신당부했다. 나는 그걸 보고 ‘에이 누가 파이썬2를 함부로 지워~’ 이랬는데, 네, 제가 바로 그 멍청이었습니다….

아니 그보다 언제 파이썬2를 지웠는지 본인은 알지도 못한….
아마 아나콘다를 설치하면서 이것이 내장하고 있던 파이썬3의 디폴트값으로 강제로 업그레이드 된 것같은데 아나콘다에게 뒤집어 씌우는 것 같지만 연유가 어떻게 되었든 일단 그 멍청한 짓을 역시나 해내버렸다.

이렇게 의도치 않게 모든 설치과정을 꼬아버렸으니 답답한 상황이 되었으나 어찌하리, pipenv 말고 다른 식으로 가상환경을 만들고 그 안에 장고를 설치하는 방법을 찾아야지!
그래서 강의에서의 그 간단한 방법을 적용하지 못하고 뱀들이 엉켜버린 이 상황을 ‘나만의 방식’을 찾아 해결해야했던 것이다.

그렇게 이틀 간 삽질한 결과, 병아리개발자인 이 내가, 과거의 내가 ‘미래의 내가 알아서 하겠지’하고 무책임하게 맡긴 문제를 해결해냈다!!

아나콘다 가상환경? Virtualenv?


지금 내 컴퓨터 안에서 파이썬 관련된 모든 패키지 위에 아나콘다가 군림하고 있는 한 앞으로도 파이썬이 돌아가는 환경에는 무조건 이 아나콘다가 개입할 것 같다는 그런 생각이 든다.
내가 이를 아직 제대로 다룰 수 없는 병아리개발자인 관계로 그렇다면 공생하는 방법을 공부해야한다는 건데, 내가 가진 문제해결방법을 찾아보니…
아무도 나같은 짓을 하지 않아서 그런 것은 없었다ㅋㅋㅋㅋ 무슨 짓을 어떻게 벌여놓은 거냐, 멍청아!! 이렇게 창의적으로 남들이 하지 않는 기발한 바보짓을 해낼 수 있다니.

처음에 파이썬2가 지워졌다는 걸 알고, 나는 이것 때문인가 하고 파이썬2를 다시 설치해보았다. 그러나 역시나 pipenv를 통한 가상환경 생성에 실패했다.
그렇다면 pip3의 문제인가? pip3으로 pipenv를 재설치하고 또 같은 과정을 시도했다. 역시 실패.
그말은 결국 나는 아나콘다가 있는 한 pipenv를 쓰기는 좀 어렵다는 소리겠군.

https://tutorial.djangogirls.org/ko/django_installation/

해결방안(Solution)


(base) 192:~ spica$ cd Desktop
(base) 192:Desktop spica$ cd airbnbClone
(base) 192:airbnbClone spica$ python3 -m venv airbnb-clone
(base) 192:airbnbClone spica$ source airbnb-clone/bin/activate
(airbnb-clone) (base) 192:airbnbClone spica$ install django==2.2.5
usage: install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]
               [-o owner] file1 file2
       install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]
               [-o owner] file1 ... fileN directory
       install -d [-v] [-g group] [-m mode] [-o owner] directory ...
(airbnb-clone) (base) 192:airbnbClone spica$ pip3 install Django==2.2.5
Collecting Django==2.2.5
  Downloading https://files.pythonhosted.org/packages/94/9f/a56f7893b1280e5019482260e246ab944d54a9a633a01ed04683d9ce5078/Django-2.2.5-py3-none-any.whl (7.5MB)
     |████████████████████████████████| 7.5MB 12kB/s 
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ReadTimeoutError("HTTPSConnectionPool(host='pypi.org', port=443): Read timed out. (read timeout=15)")': /simple/sqlparse/
Collecting sqlparse
  Downloading https://files.pythonhosted.org/packages/ef/53/900f7d2a54557c6a37886585a91336520e5539e3ae2423ff1102daf4f3a7/sqlparse-0.3.0-py2.py3-none-any.whl
Collecting pytz
  Downloading https://files.pythonhosted.org/packages/e7/f9/f0b53f88060247251bf481fa6ea62cd0d25bf1b11a87888e53ce5b7c8ad2/pytz-2019.3-py2.py3-none-any.whl (509kB)
     |████████████████████████████████| 512kB 13kB/s 
Installing collected packages: sqlparse, pytz, Django
Successfully installed Django-2.2.5 pytz-2019.3 sqlparse-0.3.0
(airbnb-clone) (base) 192:airbnbClone spica$ django-admin

Type 'django-admin help <subcommand>' for help on a specific subcommand.

Available subcommands:

[django]
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    runserver
    sendtestemail
    shell
    showmigrations
    sqlflush
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    test
    testserver
Note that only Django core commands are listed as settings are not properly configured (error: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.).