Virtualenv: ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ์Šคํ† ์–ด ํŒŒ์ด์ฌ ์ง€์›

์— ๋งŒ๋“  2019๋…„ 06์›” 02์ผ  ยท  26์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: pypa/virtualenv

  1. Microsoft Store์—์„œ Python 3.7 ์„ค์น˜
  2. ์ƒˆ virtualenv๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
Microsoft Windows [Version 10.0.18908.1000]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\jodox>mkdir \temp\example

C:\Users\jodox>cd \temp\example

C:\temp\example>virtualenv .virtualenv
Using base prefix 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0'
New python executable in C:\temp\example\.virtualenv\Scripts\python.exe
Command C:\temp\example\.vir...v\Scripts\python.exe -m pip config list had error code 1
Installing setuptools, pip, wheel...

  Complete output from command C:\temp\example\.vir...v\Scripts\python.exe - setuptools pip wheel:
  Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_internal\__init__.py", line 19, in <module>
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_vendor\urllib3\__init__.py", line 8, in <module>
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_vendor\urllib3\connectionpool.py", line 7, in <module>
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\socket.py", line 49, in <module>
    import _socket
ImportError: DLL load failed: Access is denied.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 13, in <module>
ImportError: cannot import name 'main' from 'pip' (C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\__init__.py)
----------------------------------------
...Installing setuptools, pip, wheel...done.
Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\Scripts\virtualenv.exe\__main__.py", line 9, in <module>
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 831, in main
    symlink=options.symlink,
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 1123, in create_environment
    install_wheel(to_install, py_executable, search_dirs, download=download)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 973, in install_wheel
    _install_wheel_with_search_dir(download, project_names, py_executable, search_dirs)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 1060, in _install_wheel_with_search_dir
    call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=script)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 924, in call_subprocess
    raise OSError("Command {} failed with error code {}".format(cmd_desc, proc.returncode))
OSError: Command C:\temp\example\.vir...v\Scripts\python.exe - setuptools pip wheel failed with error code 1

C:\temp\example>pip list
Package          Version
---------------- ----------
certifi          2019.3.9
pipenv           2018.11.26
virtualenv       16.6.0
virtualenv-clone 0.5.3

C:\temp\example>
enhancement

๋ชจ๋“  26 ๋Œ“๊ธ€

@zooba ์ด๊ฒƒ์€ Windows ์Šคํ† ์–ด ์ธก์—์„œ ๋‚˜์œ ํฌ์žฅ์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค ๐Ÿค”?

@gaborbernat venv ๋ชจ๋“ˆ์ด ์ž˜ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— virtualenv์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Microsoft Windows [Version 10.0.18908.1000]
(c) 2019 Microsoft Corporation. All rights reserved.

C:\Users\jodox>cd \temp\example

(.venv) C:\temp\example>python3 -m venv .venv

C:\temp\example>.\.venv\Scripts\activate.bat

(.venv) C:\temp\example>python -V
Python 3.7.3

(.venv) C:\temp\example>python -c "import sys;print(sys.executable)"
C:\temp\example\.venv\Scripts\python.exe

(.venv) C:\temp\example>python -c "import socket"

(.venv) C:\temp\example>

์ •๋ง ์‚ฌ๋žŒ์ด ์•„๋‹ˆ์—์š”. venv๋Š” ์ƒ์„ฑ๋œ venv๋ฅผ ๋ฒˆ๋“ค๋กœ ์ œ๊ณตํ•œ ํ•ญ๋ชฉ์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋„คํŠธ์›Œํฌ ์Šคํƒ ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค(virtualenv๊ฐ€ ์ตœ์‹  pip/setuptools๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•จ). --no-download๋ฅผ ์ „๋‹ฌํ•˜๋ฉด virtualenv๋„ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@gaborbernat ๋‚˜๋Š” virtualenv๋ฅผ ์›ํ•˜์ง€ ์•Š์ง€๋งŒ pipenv ๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  args๋ฅผ ์ „๋‹ฌํ•  ์˜ต์…˜์ด ์—†์Šต๋‹ˆ๋‹ค

C:\temp\example>pipenv --help
Usage: pipenv [OPTIONS] COMMAND [ARGS]...

Options:
  --where             Output project home information.
  --venv              Output virtualenv information.
  --py                Output Python interpreter information.
  --envs              Output Environment Variable options.
  --rm                Remove the virtualenv.
  --bare              Minimal output.
  --completion        Output completion (to be eval'd).
  --man               Display manpage.
  --support           Output diagnostic information for use in GitHub issues.
  --site-packages     Enable site-packages for the virtualenv.  [env var:
                      PIPENV_SITE_PACKAGES]
  --python TEXT       Specify which version of Python virtualenv should use.
  --three / --two     Use Python 3/2 when creating virtualenv.
  --clear             Clears caches (pipenv, pip, and pip-tools).  [env var:
                      PIPENV_CLEAR]
  -v, --verbose       Verbose mode.
  --pypi-mirror TEXT  Specify a PyPI mirror.
  --version           Show the version and exit.
  -h, --help          Show this message and exit.


Usage Examples:
   Create a new project using Python 3.7, specifically:
   $ pipenv --python 3.7

   Remove project virtualenv (inferred from current directory):
   $ pipenv --rm

   Install all dependencies for a project (including dev):
   $ pipenv install --dev

   Create a lockfile containing pre-releases:
   $ pipenv lock --pre

   Show a graph of your installed dependencies:
   $ pipenv graph

   Check your installed dependencies for security vulnerabilities:
   $ pipenv check

   Install a local setup.py into your virtual environment/Pipfile:
   $ pipenv install -e .

   Use a lower-level pip command:
   $ pipenv run pip freeze

Commands:
  check      Checks for security vulnerabilities and against PEP 508 markers
             provided in Pipfile.
  clean      Uninstalls all packages not specified in Pipfile.lock.
  graph      Displays currently-installed dependency graph information.
  install    Installs provided packages and adds them to Pipfile, or (if no
             packages are given), installs all packages from Pipfile.
  lock       Generates Pipfile.lock.
  open       View a given module in your editor.
  run        Spawns a command installed into the virtualenv.
  shell      Spawns a shell within the virtualenv.
  sync       Installs all packages specified in Pipfile.lock.
  uninstall  Un-installs a provided package and removes it from Pipfile.
  update     Runs lock, then sync.


C:\temp\example>pipenv install
Creating a virtualenv for this projectโ€ฆ
Pipfile: C:\temp\example\Pipfile
Using C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\python.exe (3.7.3) to create virtualenvโ€ฆ
[==  ] Creating virtual environment...Already using interpreter C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\python.exe
Using base prefix 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0'
New python executable in C:\Users\jodox\.virtualenvs\example-Q6QloNNM\Scripts\python.exe
Command C:\Users\jodox\.virt...M\Scripts\python.exe -m pip config list had error code 1
Installing setuptools, pip, wheel...

  Complete output from command C:\Users\jodox\.virt...M\Scripts\python.exe - setuptools pip wheel:
  Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_internal\__init__.py", line 19, in <module>
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_vendor\urllib3\__init__.py", line 8, in <module>
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_vendor\urllib3\connectionpool.py", line 7, in <module>
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\socket.py", line 49, in <module>
    import _socket
ImportError: DLL load failed: Access is denied.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 13, in <module>
ImportError: cannot import name 'main' from 'pip' (C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\__init__.py)
----------------------------------------
...Installing setuptools, pip, wheel...done.

Failed creating virtual environment
[pipenv.exceptions.VirtualenvCreationException]:   File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pipenv\cli\command.py", line 254, in install
[pipenv.exceptions.VirtualenvCreationException]:       editable_packages=state.installstate.editables,
[pipenv.exceptions.VirtualenvCreationException]:   File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pipenv\core.py", line 1741, in do_install
[pipenv.exceptions.VirtualenvCreationException]:       pypi_mirror=pypi_mirror,
[pipenv.exceptions.VirtualenvCreationException]:   File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\pipenv\core.py", line 574, in ensure_project
[pipenv.exceptions.VirtualenvCreationException]:       pypi_mirror=pypi_mirror,
[pipenv.exceptions.VirtualenvCreationException]:   File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\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 "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\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 "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 2580, in <module>
    main()
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 831, in main
    symlink=options.symlink,
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 1123, in create_environment
    install_wheel(to_install, py_executable, search_dirs, download=download)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 973, in install_wheel
    _install_wheel_with_search_dir(download, project_names, py_executable, search_dirs)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 1060, in _install_wheel_with_search_dir
    call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=script)
  File "C:\Users\jodox\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv.py", line 924, in call_subprocess
    raise OSError("Command {} failed with error code {}".format(cmd_desc, proc.returncode))
OSError: Command C:\Users\jodox\.virt...M\Scripts\python.exe - setuptools pip wheel failed with error code 1

Failed to create virtual environment.

C:\temp\example>

_socket์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ์ฝ”์–ด์˜ ํŒจํ‚ค์ง• ๋ฌธ์ œ๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๐Ÿค” ๊ทธ๋ž˜๋„ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@pfmoore ์ด๊ฒƒ์€ pip ๊ด€๋ จ ๐Ÿค” ๊ฐ™์ง€๋งŒ python ๊ฒฝ๋กœ์— ํœ ์„ ๋„ฃ์–ด virtualenv์—์„œ ํ˜ธ์ถœํ•  ๋•Œ ์ด์ƒํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

Command C:\Users\traveler\gi...v\Scripts\python.exe -m pip config list had error code 1
Installing setuptools, pip, wheel...

  Complete output from command C:\Users\traveler\gi...v\Scripts\python.exe - setuptools pip wheel:
  Traceback (most recent call last):
  File "<stdin>", line 10, in <module>
  File "C:\Users\traveler\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_internal\__init__.py", line 19, in <module>
  File "C:\Users\traveler\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_vendor\urllib3\__init__.py", line 8, in <module>
  File "C:\Users\traveler\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.7_qbz5n2kfra8p0\LocalCache\local-packages\Python37\site-packages\virtualenv_support\pip-19.1.1-py2.py3-none-any.whl\pip\_vendor\urllib3\connectionpool.py", line 7, in <module>
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\socket.py", line 49, in <module>
    import _socket
ImportError: DLL load failed: Access is denied.

ํŽธ์ง‘: NM, ์šฐ๋ฆฌ์˜ ์ƒˆ๋กœ์šด virtualenv๊ฐ€ _socket์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค, ๋‚ด ๋‚˜์œ ๐Ÿคฆโ€โ™‚

๋”ฐ๋ผ์„œ ์ƒˆ๋กœ ์ƒ์„ฑ๋œ virtualenv์—์„œ _socket์„ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\_socket.cp37-win_amd64.pyd
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\_socket.pyd
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\_socket.py
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\_socket.pyw
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\Lib\_socket.pyc
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\DLLs\_socket.cp37-win_amd64.pyd
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\DLLs\_socket.pyd
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 670, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 583, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 1043, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: DLL load failed: Access is denied.

์„ค์น˜๋œ ํŒŒ์ด์ฌ์—์„œ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ

์ €๋Š” Python์˜ Store ๋ฐฐํฌํŒ์„ ์‚ฌ์šฉํ•œ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. @zooba ๋Š” ํ•ด๋‹น ๋ฐฐํฌํŒ์˜ ์ „๋ฌธ๊ฐ€์ด๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ ๋„์›€์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@JoDoX ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํŒŒ์ด์ฌ์„ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํ–‰

import _socket
import socket

์˜ค๋ฅ˜ ์—†์ด ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด virtualenv(๋˜๋Š” pip)๊ฐ€ ์•„๋‹ˆ๋ผ Python์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@pfmoore ์œ„์˜ ๋‚ด ๊ฒŒ์‹œ๋ฌผ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์ด๋Ÿฌํ•œ ๋ช…๋ น์€ ์„ค์น˜๋œ Python์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ€์ƒ ํ™˜๊ฒฝ python ๋‚ด์—์„œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜๋œ Python์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ DLL์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ ์–ด๋–ป๊ฒŒ๋“  ๊ด€๋ จ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋ฉด ์—…์ŠคํŠธ๋ฆผ DLL์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์†์‹ค๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ virtualenv ๋˜๋Š” Windows ์Šคํ† ์–ด ํŒจํ‚ค์ง•๊ณผ ๊ด€๋ จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ํ•˜๋‹ค:

๊ฐ€์ƒ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ  ์‹œ์ž‘ ๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด ๊ฐ€์ƒ ํ™˜๊ฒฝ์ด ์‹ค์ œ๋กœ ์›๋ž˜ ์œ„์น˜์—์„œ pyd๋ฅผ ๋กœ๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์›๋ž˜ ์œ„์น˜์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. Include ๋ฐ Lib๊ฐ€ ๋ชจ๋‘ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค. virtualenv์—์„œ ์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ ์ด๊ฒƒ์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.... ์–ด์ฉŒ๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค venv๋ฅผ ๋งŒ๋“œ๋Š” ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ์„์ง€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค ๐Ÿค” ์กฐ์‚ฌ๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

# C:\Users\traveler\git\venv\lib\encodings\__pycache__\__init__.cpython-37.pyc matches C:\Users\traveler\git\venv\lib\encodings\__init__.py
# code object from 'C:\\Users\\traveler\\git\\venv\\lib\\encodings\\__pycache__\\__init__.cpython-37.pyc'
# trying C:\Users\traveler\git\venv\lib\codecs.cp37-win_amd64.pyd
# trying C:\Users\traveler\git\venv\lib\codecs.pyd
# trying C:\Users\traveler\git\venv\lib\codecs.py
# C:\Users\traveler\git\venv\lib\__pycache__\codecs.cpython-37.pyc matches C:\Users\traveler\git\venv\lib\codecs.py
# code object from 'C:\\Users\\traveler\\git\\venv\\lib\\__pycache__\\codecs.cpython-37.pyc'

๋Œ€

# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\DLLs\encodings.cp37-win_amd64.pyd
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\DLLs\encodings.pyd
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\DLLs\encodings.py
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\DLLs\encodings.pyw
# trying C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\DLLs\encodings.pyc
# C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.7_3.7.1008.0_x64__qbz5n2kfra8p0\lib\encodings\__pycache__\__init__.

@gaborbernat ์•„, ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค - ๊ท€ํ•˜์˜ ๊ฒŒ์‹œ๋ฌผ์„ ํ›‘์–ด๋ณด๊ณ  ๊ท€ํ•˜๊ฐ€ ๋งํ•œ ๊ฒƒ์„ ์˜คํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ž˜๋ชป์ด์•ผ.

Python ์‹คํ–‰ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ํ™•์‹คํžˆ ๋ฐฐ์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Šคํ† ์–ด ๋นŒ๋“œ ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๊ฐœ๋ฐœ์ž ์ˆ˜์ค€ ๋ฌธ์„œ๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ @zooba ๊ฐ€ ์ •๋ง ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ์—๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์‹คํ–‰ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•ฑ ํŒจํ‚ค์ง€ ์™ธ๋ถ€์— ์žˆ์œผ๋ฉด ์šด์˜ ์ฒด์ œ์—์„œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๋Œ€๋กœ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๊ฑธ๊ฑฐ๋‚˜ venv/scripts/nt ์— ์žˆ๋Š” python.exe ๋ฅผ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ํ•  ์‹ค์ œ ๊ฒƒ์„ ์ฐพ๊ธฐ ์œ„ํ•ด pyvenv.cfg ๋ฅผ ์ฐพ๋Š” py.exe ๋Ÿฐ์ฒ˜์˜ ํŠน๋ณ„ํ•œ ๋ณต์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค. (๋˜๋Š” ํ•ด๋‹น ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ์„ ํ˜ธํ•˜๋Š” ๊ตฌ์„ฑ ์„ค์ •์„ ์ฐพ๋Š” ๋‹ค๋ฅธ ๋ฒ„์ „์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

์•ฑ ํŒจํ‚ค์ง€ ์™ธ๋ถ€์— ์žˆ์œผ๋ฉด ์šด์˜ ์ฒด์ œ์—์„œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๋Œ€๋กœ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์†Œ ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚˜์ง€๋งŒ ์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ฝ”๋“œ(๋ฐ/๋˜๋Š” ์ด์— ๋Œ€ํ•œ ๊ด€๋ จ MS ๋ฌธ์„œ)๋ฅผ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ €๋Š” ํ˜„์žฌ๋ณด๋‹ค ์Šคํ† ์–ด ์•ฑ์„ ๋” ์ž˜ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(ํ˜„์žฌ ๊ธฐ๋ณธ์ ์œผ๋กœ MS ์Šคํ† ์–ด ์•ฑ์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค).

์ด ๋ถ€๋ถ„์ด ๋ฌธ์„œํ™”๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ฌธ์„œํ™”๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ MSIX ๋ฌธ์„œ ๋‚ด๋ถ€ ๊นŠ์ˆ™์ด ์žˆ๊ฑฐ๋‚˜ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์ผ๋ถ€ AppV ์‚ฌ์–‘(์‚ฌ์šฉ๋œ ๊ฒฉ๋ฆฌ ๊ธฐ์ˆ ์˜ ์ด์ „ ๋ฒ„์ „์ž„)์— ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .

ํŒจํ‚ค์ง€๋Š” ์ฃผ๋กœ ๋‹จ์ผ ์ง„์ž…์ ์„ ์˜๋ฏธํ•˜๋ฉฐ ๋‹ค๋ฅธ ์•ฑ์ด ์šฐ๋ฆฌ DLL์„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋Š” ์•ฑ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŒจํ‚ค์ง€์— ์†ํ•ด ์žˆ์Œ์„ ํ™•์ธํ•  ๋•Œ๊นŒ์ง€ ํŒจํ‚ค์ง€์˜ LoadLibrary ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ์›๋ณธ python.exe ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„, ๊ทธ๋ฆฌ๊ณ  ๋ถ„๋ช…ํžˆ ๋งํ•˜์ง€๋งŒ, ์ด๊ฒƒ๋“ค์€ ๋ชจ๋‘ ์˜๋„์ ์ธ ์˜๋„์ ์ธ OS ์ œํ•œ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. Python์€ ์ด๋Ÿฌํ•œ ์ผ์„ ํ•˜๋„๋ก ์„ ํƒํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ CPython์—๋Š” ์ด์— ๋Œ€ํ•œ ์ฝ”๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. VENV_REDIRECT ์ •์˜ ๋’ค์— ์ˆจ๊ฒจ์ง„ launcher.c ๋ถ€๋ถ„์ด ํฅ๋ฏธ๋กœ์šธ ์ˆ˜ ์žˆ์ง€๋งŒ(๊ทธ๋ฆฌ๊ณ  ์ง€์›๋˜์ง€ ์•Š๋Š” ๋‚ด๋ถ€ ์„ธ๋ถ€ ์ •๋ณด...)

๊ฐ์‚ฌ ํ•ด์š”. ๋‚˜๋Š” ์•ฝ๊ฐ„์˜ ํŒŒ๊ธฐ๋ฅผํ–ˆ๊ณ  https://docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-behind-the-scenes ๊ฐ€ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค(๋น„๋ก ๋‚˜๋Š” ์•„์ง ์ฝ์–ด๋ณด์„ธ์š”. ๋‚˜์ค‘์— ๋งํฌ๋ฅผ ๋‹ค์‹œ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ์ฃผ๋กœ ํฌ์ŠคํŒ…ํ•˜๊ณ  ์žˆ์–ด์š” ;-))

@gaborbernat virtualenv๊ฐ€ ์ €์žฅ์†Œ Python์„ ์ง€์›ํ•˜๋Š” "์˜ฌ๋ฐ”๋ฅธ" ๋ฐฉ๋ฒ•์€ @zooba ๊ฐ€ ์ œ์•ˆํ•œ ๋Œ€๋กœ venv/scripts/nt ์—์„œ ๋ฆฌ๋””๋ ‰ํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ venv๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ ์ƒ์„ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์•„์ด๋””์–ด์— ๋งค์šฐ ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์–ผ๋งˆ ์ „์— ์ œ์•ˆํ–ˆ์œผ๋ฉฐ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ๊ด€์‹ฌ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. Store ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ–ˆ์ง€๋งŒ ๋™์ผํ•œ ๋ฒ„์ „์˜ "ํ‘œ์ค€" Python์ด ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ๋” ๋‚˜์  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (๊ฒŒ๋‹ค๊ฐ€ virtualenv์˜ ์‚ฌ์šฉ์ž ์ •์˜ site.py ์™€ ๊ฐ™์€ ๊ฒƒ๊ณผ ๋ฆฌ๋””๋ ‰ํ„ฐ๋ฅผ ํ˜ผํ•ฉํ•ด๋„ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.)

์ฝ”๋”ฉ์„ ๋„์™€๋“œ๋ฆฌ๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์›ํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ง€์นจ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

(์˜ค, ๊ทธ๋ฆฌ๊ณ  @zooba , ์ œ๊ฐ€ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๋Š” ๋™์•ˆ ์ €์žฅ์†Œ Python์€ "์ผ๋ฐ˜" Python ์„ค์น˜์™€ ์–ผ๋งˆ๋‚˜ ์ž˜ ๊ณต์กดํ•ฉ๋‹ˆ๊นŒ? ์ด ํ•ญ๋ชฉ์„ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด ๋ฐฉํ•ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊นจ๋—ํ•œ VM์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„๊นŒ์š”? ๋‚ด ๊ธฐ๋ณธ Python ์„ค์น˜๋กœ?๋˜๋Š” ๋ถ€์ž‘์šฉ ์—†์ด ์ƒ์  Python์„ ์„ค์น˜ ๋ฐ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?)

๊ทธ๋ž˜์„œ ์ข‹์€ ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ํ•ต์‹ฌ ๋…ผ๋ฆฌ๋ฅผ ๋‹ค์Œ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ stdlib๊ฐ€ ์ œ๊ณตํ•œ venv๋กœ venv๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํŒจ์น˜ stdlib๊ฐ€ venv๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋™์ผํ•œ ๋ณด์žฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์šฐ๋ฆฌ ์ž์‹ ์˜ ๋…ผ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

์ œ๊ณต๋œ stdlib๊ฐ€ venv๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์œ„์น˜:

  • ํŒŒ์ด์ฌ 2,
  • venv๊ฐ€ ๋ณ„๋„๋กœ ํŒจํ‚ค์ง•๋˜์–ด ํ˜„์žฌ ์„ค์น˜๋˜์ง€ ์•Š์€ ๋ฐฐํฌํŒ(์˜ˆ: ubuntu python3.7-venv). @pfmoore ๊ฐ€ ๊ฐ€๋ฅด์ณค์Šต๋‹ˆ๊นŒ? ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ์ œ๊ณตํ•˜๋Š” ๋ณด์ฆ ๋ชฉ๋ก์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ฐ•ํ•œ +1์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Python 2๊ฐ€ ๊ณง EOL์— ๋„๋‹ฌํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›๋˜๋Š” ๋ชจ๋“  Python ๋ฒ„์ „์— venv๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ๋ฒ„์ „์—๋„ pyvenv.cfg ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์Œ). ๋”ฐ๋ผ์„œ ํ˜„์žฌ ์‚ฌ์šฉํ•˜๋Š” ํ•ดํ‚น์„ ์ตœ๋Œ€ํ•œ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํฐ ์Šน๋ฆฌ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๋˜ํ•œ virtualenv์™€ venv ๊ฐ„์˜ ํ˜ธํ™˜์„ฑ๋„ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค :-))

์–ด๋ ค์šด ๋ถ€๋ถ„์€ ์šฐ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ณด์ฆ ๋ชฉ๋ก์„ ๊ตฌ์„ฑํ•˜๋Š” ํ•ญ๋ชฉ์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‹ค์ œ๋กœ ๋งŽ์€ ๊ฒƒ์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์–ด๋ ค์šด ๋ฌธ์ œ๋Š” sys.real_prefix ๋Œ€ sys.base_prefix ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์†”์งํžˆ ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ๊ฒฝ์šฐ์—๋„ stdlib๋ฅผ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ์ „ํ™˜ ๊ธฐ๊ฐ„).

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด @pfmoore ์™€ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ํ•˜์ž๋ฉด, Python 2 ์ง€์›์€ ์ ์–ด๋„ ํ–ฅํ›„ 3๋…„ ๋™์•ˆ์€ ์ค‘๋‹จ๋  ๊ณ„ํš์ด ์—†์Šต๋‹ˆ๋‹ค. ์ƒˆ ์†”๋ฃจ์…˜์€ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ stdlib venv๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์ œ๊ณต ๋…ผ๋ฆฌ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ดํ•ดํ–ˆ๋‹ค. Python 2๊ฐ€ ์ง€์›๋˜๋„๋ก ๊ธฐ์กด ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•˜์ง€๋งŒ core venv ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์—์„œ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

https://github.com/pypa/virtualenv/issues/1366 ์—์„œ ๋ณ„๋„์˜ ํ† ๋ก ์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ‘

(์˜ค, ๊ทธ๋ฆฌ๊ณ  @zooba , ์ œ๊ฐ€ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๋Š” ๋™์•ˆ ์ €์žฅ์†Œ Python์€ "์ผ๋ฐ˜" Python ์„ค์น˜์™€ ์–ผ๋งˆ๋‚˜ ์ž˜ ๊ณต์กดํ•ฉ๋‹ˆ๊นŒ? ์ด ํ•ญ๋ชฉ์„ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด ๋ฐฉํ•ด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๊นจ๋—ํ•œ VM์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„๊นŒ์š”? ๋‚ด ๊ธฐ๋ณธ Python ์„ค์น˜๋กœ?๋˜๋Š” ๋ถ€์ž‘์šฉ ์—†์ด ์ƒ์  Python์„ ์„ค์น˜ ๋ฐ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?)

@pfmoore (Github ์•Œ๋ฆผ์ด ํ•ญ์ƒ ๋‚ด ์ฃผ์˜๋ฅผ ๋Œ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค...) ๋†“์ณ์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

๋ถ€์ž‘์šฉ ์—†์ด ์Šคํ† ์–ด Python์„ ์„ค์น˜/์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ๊ฐ€์žฅ ํฐ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. (๋‹จ, ์ด๊ฒƒ์˜ ๋‹จ์ ์€ ์‹ค์ œ ์‚ฌ์šฉ์ž ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์—†๊ณ  ๊ฐ’์„ ๋ฎ์–ด์“ฐ๋ฉด ์ƒˆ๋กœ ์„ค์น˜/์ œ๊ฑฐ ์ฃผ๊ธฐ๊ฐ€ ์ค‘๋‹จ๋˜๊ธฐ ๋•Œ๋ฌธ์— PEP 514๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

์šฐ๋ฆฌ๋Š” pep 514์— ๋”ฐ๋ผ PythonCore ๋Œ€์‹  ๋‹ค๋ฅธ ํšŒ์‚ฌ(์˜ˆ: Microsoft Store)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฎ์–ด์“ฐ๊ธฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  Twitter๋ฅผ ํ†ตํ•ด ์ด์•ผ๊ธฐํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๋ฅผ ์ˆ˜๋ฝํ•˜๋„๋ก py.exe๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

virtualenv ๋Œ€์‹  venv๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์ด์ „ virtualenv๋Š” ์ด๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์—†๊ณ  ์ง€์›ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. virtualenv 20, ๋‹ค์‹œ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šฌํ”„๊ฒŒ๋„ AFAIK์—์„œ๋Š” Azure CI์— ์Šคํ† ์–ด ํŒŒ์ด์ฌ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. @zooba ์ด๊ฒƒ์ด ์—ฌ์ „ํžˆ ์‚ฌ์‹ค์ด๋ฉฐ ๊ณ„์† ์ง„ํ–‰๋  ๊ฒƒ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต์—์„œ ์šฐ๋ฆฌ๋Š” ๋‚ด์žฅ/์ž๊ฐ€ ์‹คํ–‰ ๋ฉ”์†Œ๋“œ๋ฅผ ์Šคํ† ์–ด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ์ด store pyhton @zooba ๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•˜๋ ค๋ฉด:

๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ์ฝ๊ธฐ ์œ„ํ•ด sys.executable์„ ์—ด๋ ค๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(์‹คํŒจํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค).
๋˜๋Š” pythonXY.dll์ด sys.executable๊ณผ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— ์—†๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ˆ˜์ •ํ•ด์•ผ ํ•  ๋˜ ๋‹ค๋ฅธ ๊ฐ€์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•(์ž„๋ฒ ๋”ฉ, ๊ณ ์ •, ์ •์  ๋นŒ๋“œ)์œผ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ virtualenv๊ฐ€ ํ˜„์žฌ ๊ทธ ์–ด๋–ค ๊ฒƒ๊ณผ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ด์ „(3.5 ์ด์ „) ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์€ ์‹œ์Šคํ…œ ํด๋”์— ๋„ฃ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜๋ฏ€๋กœ ์™„๋ฒฝํ•œ ํ…Œ์ŠคํŠธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ด์ œ #1502์˜ ์ผ๋ถ€๋กœ ๋‹ฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Virtualenv๋Š” store python์„ ๋‚ด์žฅ ์ „๋žต๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œํ•˜๊ณ , store python์˜ venv ๋ชจ๋“ˆ์— ์ž‘์—…์„ ์œ„์ž„ํ•˜๊ธฐ ์œ„ํ•ด ํด๋ฐฑํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ๊ฐ€ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด์ œ Windows OS๊ฐ€ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์‚ฌ ๋ฐฉ๋ฒ• ๋Œ€์‹  ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(์ž„์‹œ ํด๋” ๋‚ด๋ถ€์— ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋งŒ๋“ค์–ด ํ…Œ์ŠคํŠธ).

virtualenv ๋‚ด์—์„œ Microsoft Store์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ œ๊ณต ์ง€์›์€ ์•„๋งˆ๋„ ์ด์— ํ•„์š”ํ•œ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋„๋ก cpython3windows ํด๋ž˜์Šค๋ฅผ ๊ฐœ์„ ํ•˜์—ฌ ํ–ฅํ›„ ํ›„์† ํ‹ฐ์ผ“์—์„œ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰