Virtualenv: --always-copy์˜ ํŒŒ์† - ๋‹ค์Œ๊ณผ ํ•จ๊ป˜ ์‹คํŒจ: ImportError: ์‹œ๊ฐ„์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋ชจ๋“ˆ ์—†์Œ

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

CentOS 6.5(SCL์˜ python2.7):

[dev<strong i="6">@centbox</strong> core]$ virtualenv-2.7 --always-copy .break
sys.path (patched logging) = ['/opt/rh/python27/root/usr/bin', '/opt/rh/python27/root/usr/lib/python2.7/site-packages/setuptools-2.2-py2.7.egg', '/opt/rh/python27/root/usr/lib/python2.7/site-packages/wheel-0.22.0-py2.7.egg', '/opt/rh/python27/root/usr/lib/python2.7/site-packages/virtualenv-1.11.2-py2.7.egg', '/opt/rh/python27/root/usr/lib/python2.7/site-packages/pip-1.5.2-py2.7.egg', '/opt/rh/python27/root/usr/lib64/python27.zip', '/opt/rh/python27/root/usr/lib64/python2.7', '/opt/rh/python27/root/usr/lib64/python2.7/plat-linux2', '/opt/rh/python27/root/usr/lib64/python2.7/lib-tk', '/opt/rh/python27/root/usr/lib64/python2.7/lib-old', '/opt/rh/python27/root/usr/lib64/python2.7/lib-dynload', '/opt/rh/python27/root/usr/lib64/python2.7/site-packages', '/opt/rh/python27/root/usr/lib/python2.7/site-packages']
Cannot find file lib (bad symlink)
New python executable in .break/bin/python2.7
Also creating executable in .break/bin/python
Installing setuptools, pip...
  Complete output from command /home/dev/core/.break/bin/python2.7 -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip:
  Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/opt/rh/python27/root/usr/lib/python2.7/site-packages/virtualenv-1.11.2-py2.7.egg/virtualenv_support/pip-1.5.2-py2.py3-none-any.whl/pip/__init__.py", line 9, in <module>
  File "/opt/rh/python27/root/usr/lib/python2.7/site-packages/virtualenv-1.11.2-py2.7.egg/virtualenv_support/pip-1.5.2-py2.py3-none-any.whl/pip/log.py", line 6, in <module>
  File "/opt/rh/python27/root/usr/lib64/python2.7/logging/__init__.py", line 26, in <module>
    import sys, os, time, cStringIO, traceback, warnings, weakref
ImportError: No module named time
----------------------------------------
...Installing setuptools, pip...done.
Traceback (most recent call last):
  File "/opt/rh/python27/root/usr/bin/virtualenv-2.7", line 9, in <module>
    load_entry_point('virtualenv==1.11.2', 'console_scripts', 'virtualenv-2.7')()
  File "/opt/rh/python27/root/usr/lib/python2.7/site-packages/virtualenv-1.11.2-py2.7.egg/virtualenv.py", line 824, in main
    symlink=options.symlink)
  File "/opt/rh/python27/root/usr/lib/python2.7/site-packages/virtualenv-1.11.2-py2.7.egg/virtualenv.py", line 992, in create_environment
    install_wheel(to_install, py_executable, search_dirs)
  File "/opt/rh/python27/root/usr/lib/python2.7/site-packages/virtualenv-1.11.2-py2.7.egg/virtualenv.py", line 960, in install_wheel
    'PIP_NO_INDEX': '1'
  File "/opt/rh/python27/root/usr/lib/python2.7/site-packages/virtualenv-1.11.2-py2.7.egg/virtualenv.py", line 902, in call_subprocess
    % (cmd_desc, proc.returncode))
OSError: Command /home/dev/core/.break/bin/python2.7 -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip failed with error code 1

๊ทธ๊ฒƒ ์—†์ด๋Š” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

[dev<strong i="10">@centbox</strong> core]$ virtualenv-2.7 .works
sys.path (patched logging) = ['/opt/rh/python27/root/usr/bin', '/opt/rh/python27/root/usr/lib/python2.7/site-packages/setuptools-2.2-py2.7.egg', '/opt/rh/python27/root/usr/lib/python2.7/site-packages/wheel-0.22.0-py2.7.egg', '/opt/rh/python27/root/usr/lib/python2.7/site-packages/virtualenv-1.11.2-py2.7.egg', '/opt/rh/python27/root/usr/lib/python2.7/site-packages/pip-1.5.2-py2.7.egg', '/opt/rh/python27/root/usr/lib64/python27.zip', '/opt/rh/python27/root/usr/lib64/python2.7', '/opt/rh/python27/root/usr/lib64/python2.7/plat-linux2', '/opt/rh/python27/root/usr/lib64/python2.7/lib-tk', '/opt/rh/python27/root/usr/lib64/python2.7/lib-old', '/opt/rh/python27/root/usr/lib64/python2.7/lib-dynload', '/opt/rh/python27/root/usr/lib64/python2.7/site-packages', '/opt/rh/python27/root/usr/lib/python2.7/site-packages']
New python executable in .works/bin/python2.7
Also creating executable in .works/bin/python
Installing setuptools, pip...done.
[dev<strong i="11">@centbox</strong> core]$

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํฅ๋ฏธ๋กญ๊ฒŒ๋„(Amazon Linux์— ์žˆ์Œ) virtualenv --always-copy app ์ˆ˜ํ–‰ํ•  ๋•Œ ์ด ์˜ค๋ฅ˜( Cannot find file lib (bad symlink) )๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ mkdir app; cd app; virtualenv --always-copy . ์ˆ˜ํ–‰ํ•  ๋•Œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. app ๊ฐ€ virtualenv์— ์˜ํ•ด ์ƒ์„ฑ๋  ๋•Œ lib64 ๋””๋ ‰ํ† ๋ฆฌ๋กœ ํฌํ•จ๋˜์ง€๋งŒ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— virtualenv๋ฅผ ์ƒ์„ฑํ•˜๋ฉด lib ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

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

์ €๋„ ์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ์ง€๋งŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ no-setuptools ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ virtualenv์— pip๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ƒˆ virtualenv์— pip/setuptools๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๋ฒ„์ „ ์ •๋ณด:

  • ํŽ˜๋„๋ผ 19 x86_64,
  • Python 2.7.5์˜ ์‹œ์Šคํ…œ ์„ค์น˜
  • ๊ฐ€์ƒ ํ™˜๊ฒฝ 1.11.4
  • ํ• 1.5.4

๋‹ค์Œ์€ ์‹คํŒจ ์‹œ ์ „์ฒด ์ƒ์„ธ ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค.

[vagrant<strong i="14">@localhost</strong> ~]$ virtualenv --always-copy --clear --verbose foobar
Do not need to delete foobar/lib/python2.7; already gone
Not deleting foobar/bin
Creating foobar/lib/python2.7
Cannot find file lib (bad symlink)
Symlinking Python bootstrap modules
  Copying to foobar/lib/python2.7/config
  Copying to foobar/lib/python2.7/lib-dynload
  Creating parent directories for foobar/lib64/python2.7
  Copying to foobar/lib64/python2.7/os.py
  Ignoring built-in bootstrap module: posix
  Copying to foobar/lib64/python2.7/posixpath.py
  Cannot import bootstrap module: nt
  Copying to foobar/lib64/python2.7/ntpath.py
  Copying to foobar/lib64/python2.7/genericpath.py
  Copying to foobar/lib64/python2.7/fnmatch.py
  Copying to foobar/lib64/python2.7/locale.py
  Copying to foobar/lib64/python2.7/encodings
  Copying to foobar/lib64/python2.7/codecs.py
  Copying to foobar/lib64/python2.7/stat.py
  Copying to foobar/lib64/python2.7/UserDict.py
  Creating parent directories for foobar/lib64/python2.7/lib-dynload
  Copying to foobar/lib64/python2.7/lib-dynload/readline.so
  Copying to foobar/lib64/python2.7/copy_reg.py
  Copying to foobar/lib64/python2.7/types.py
  Copying to foobar/lib64/python2.7/re.py
  Copying to foobar/lib64/python2.7/sre.py
  Copying to foobar/lib64/python2.7/sre_parse.py
  Copying to foobar/lib64/python2.7/sre_constants.py
  Copying to foobar/lib64/python2.7/sre_compile.py
  Copying to foobar/lib64/python2.7/lib-dynload/zlibmodule.so
  Copying to foobar/lib64/python2.7/warnings.py
  Copying to foobar/lib64/python2.7/linecache.py
  Copying to foobar/lib64/python2.7/_abcoll.py
  Copying to foobar/lib64/python2.7/abc.py
  Copying to foobar/lib64/python2.7/_weakrefset.py
Creating foobar/lib/python2.7/site-packages
Writing foobar/lib64/python2.7/site.py
Writing foobar/lib64/python2.7/orig-prefix.txt
Writing foobar/lib64/python2.7/no-global-site-packages.txt
Creating parent directories for foobar/include
Copying to foobar/include/python2.7
Creating foobar/bin
New python executable in foobar/bin/python
Changed mode of foobar/bin/python to 0775
Copying to foobar/bin/python2
Copying to foobar/bin/python2.7
Testing executable with foobar/bin/python -c "import sys;out=sys.stdout;getattr(out, "buffer", out).write(sys.prefix.encode("utf-8"))"
Got sys.prefix result: u'/home/vagrant/foobar'
Creating foobar/lib64/python2.7/distutils
Writing foobar/lib64/python2.7/distutils/__init__.py
Writing foobar/lib64/python2.7/distutils/distutils.cfg
Installing setuptools, pip...
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
    File "/usr/lib/python2.7/site-packages/virtualenv_support/pip-1.5.4-py2.py3-none-any.whl/pip/__init__.py", line 9, in <module>
    File "/usr/lib/python2.7/site-packages/virtualenv_support/pip-1.5.4-py2.py3-none-any.whl/pip/log.py", line 6, in <module>
    File "/usr/lib64/python2.7/logging/__init__.py", line 26, in <module>
      import sys, os, time, cStringIO, traceback, warnings, weakref
  ImportError: No module named time
  Complete output from command /home/vagrant/foobar/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip:
  Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/virtualenv_support/pip-1.5.4-py2.py3-none-any.whl/pip/__init__.py", line 9, in <module>
  File "/usr/lib/python2.7/site-packages/virtualenv_support/pip-1.5.4-py2.py3-none-any.whl/pip/log.py", line 6, in <module>
  File "/usr/lib64/python2.7/logging/__init__.py", line 26, in <module>
    import sys, os, time, cStringIO, traceback, warnings, weakref
ImportError: No module named time
----------------------------------------
...Installing setuptools, pip...done.
Traceback (most recent call last):
  File "/usr/bin/virtualenv", line 11, in <module>
    sys.exit(main())
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 824, in main
    symlink=options.symlink)
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 992, in create_environment
    install_wheel(to_install, py_executable, search_dirs)
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 960, in install_wheel
    'PIP_NO_INDEX': '1'
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 902, in call_subprocess
    % (cmd_desc, proc.returncode))
OSError: Command /home/vagrant/foobar/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip failed with error code 1

๋‹ค์Œ์€ ์„ฑ๊ณต์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค.

[vagrant<strong i="6">@localhost</strong> ~]$ virtualenv --always-copy --clear --verbose --no-setuptools foobar
Do not need to delete foobar/lib/python2.7; already gone
Not deleting foobar/bin
Creating foobar/lib/python2.7
Cannot find file lib (bad symlink)
Symlinking Python bootstrap modules
  Copying to foobar/lib/python2.7/config
  Copying to foobar/lib/python2.7/lib-dynload
  Creating parent directories for foobar/lib64/python2.7
  Copying to foobar/lib64/python2.7/os.py
  Ignoring built-in bootstrap module: posix
  Copying to foobar/lib64/python2.7/posixpath.py
  Cannot import bootstrap module: nt
  Copying to foobar/lib64/python2.7/ntpath.py
  Copying to foobar/lib64/python2.7/genericpath.py
  Copying to foobar/lib64/python2.7/fnmatch.py
  Copying to foobar/lib64/python2.7/locale.py
  Copying to foobar/lib64/python2.7/encodings
  Copying to foobar/lib64/python2.7/codecs.py
  Copying to foobar/lib64/python2.7/stat.py
  Copying to foobar/lib64/python2.7/UserDict.py
  Creating parent directories for foobar/lib64/python2.7/lib-dynload
  Copying to foobar/lib64/python2.7/lib-dynload/readline.so
  Copying to foobar/lib64/python2.7/copy_reg.py
  Copying to foobar/lib64/python2.7/types.py
  Copying to foobar/lib64/python2.7/re.py
  Copying to foobar/lib64/python2.7/sre.py
  Copying to foobar/lib64/python2.7/sre_parse.py
  Copying to foobar/lib64/python2.7/sre_constants.py
  Copying to foobar/lib64/python2.7/sre_compile.py
  Copying to foobar/lib64/python2.7/lib-dynload/zlibmodule.so
  Copying to foobar/lib64/python2.7/warnings.py
  Copying to foobar/lib64/python2.7/linecache.py
  Copying to foobar/lib64/python2.7/_abcoll.py
  Copying to foobar/lib64/python2.7/abc.py
  Copying to foobar/lib64/python2.7/_weakrefset.py
Creating foobar/lib/python2.7/site-packages
Writing foobar/lib64/python2.7/site.py
Writing foobar/lib64/python2.7/orig-prefix.txt
Writing foobar/lib64/python2.7/no-global-site-packages.txt
Creating parent directories for foobar/include
Copying to foobar/include/python2.7
Creating foobar/bin
New python executable in foobar/bin/python
Changed mode of foobar/bin/python to 0775
Copying to foobar/bin/python2
Copying to foobar/bin/python2.7
Testing executable with foobar/bin/python -c "import sys;out=sys.stdout;getattr(out, "buffer", out).write(sys.prefix.encode("utf-8"))"
Got sys.prefix result: u'/home/vagrant/foobar'
Creating foobar/lib64/python2.7/distutils
Writing foobar/lib64/python2.7/distutils/__init__.py
Writing foobar/lib64/python2.7/distutils/distutils.cfg
Writing foobar/bin/activate
Writing foobar/bin/activate.fish
Writing foobar/bin/activate_this.py
Writing foobar/bin/activate.csh

์‹คํŒจํ•œ ๊ฒฝ์šฐ์™€ ์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ ๋ชจ๋‘ ์ฒซ ๋ฒˆ์งธ ์˜ค๋ฅ˜ ์ค„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Cannot find file lib (bad symlink)

์ฐพ์„ ์ˆ˜ ์—†๋Š” ํŒŒ์ผ์— ๋Œ€ํ•œ ์ „์ฒด ๊ฒฝ๋กœ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋กœ๊ทธ๋Š” ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ํŒŒ์ผ์— ๋Œ€ํ•ด os.path.abspath ๋ฅผ ์ธ์‡„ํ•˜๊ธฐ ์œ„ํ•ด virtualenv.py ๋ฅผ ํ•ดํ‚นํ•˜์—ฌ ๋‹ค์Œ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

Cannot find file /home/vagrant/lib (bad symlink)

ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์—์„œ lib ํด๋”๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์žฌ๊ณ  Python 2.7์ด ์žˆ๋Š” Centos7์—์„œ๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

$ virtualenv --always-copy /opt/
New python executable in /opt/bin/python
Installing setuptools, pip...
  Complete output from command /opt/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip:
  Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/virtualenv_support/pip-6.0.6-py2.py3-none-any.whl/pip/__init__.py", line 4, in <module>
  File "/usr/lib64/python2.7/logging/__init__.py", line 26, in <module>
    import sys, os, time, cStringIO, traceback, warnings, weakref
ImportError: No module named time
----------------------------------------
...Installing setuptools, pip...done.
Traceback (most recent call last):
  File "/usr/bin/virtualenv", line 11, in <module>
    sys.exit(main())
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 825, in main
    symlink=options.symlink)
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 993, in create_environment
    install_wheel(to_install, py_executable, search_dirs)
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 961, in install_wheel
    'PIP_NO_INDEX': '1'
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 903, in call_subprocess
    % (cmd_desc, proc.returncode))
OSError: Command /opt/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip failed with error code 1

์—ฌ๊ธฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. CentOS 6.5์—์„œ --always-copy ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ์Šคํ…œ Python 2.6์€ ์–ธ๊ธ‰ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ImportError: No module named time ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ…์€ EL ๊ธฐ๋ฐ˜ ๋ฐฐํฌํŒ์—์„œ --always-copy ์˜ต์…˜์„ ์žŠ์–ด๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ fix_lib64 ํ•จ์ˆ˜์— ์˜คํƒ€๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์ˆ˜์ •ํ•˜๊ณ  ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ค„๋กœ ์ด๋™:

   1579         if symlink:                              
   1580             os.symlink('lib', lib64_link)      
   1581         else:                                    
   1582             copyfile('lib', lib64_link)        

'lib' ๋ฅผ lib_dir ๋Œ€์ฒด

  1579         if symlink:                              
   1580             os.symlink(lib_dir, lib64_link)      
   1581         else:                                    
   1582             copyfile(lib_dir, lib64_link)        

๋Šฆ์—ˆ์ง€๋งŒ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค

--no-setup-tools ๋ฐ --always-copy ํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ CentOS 7.1์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๊ธฐ์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. virtualenv๋ฅผ ํŒจํ‚ค์ง•ํ•˜์—ฌ ๊ณ ๊ฐ์—๊ฒŒ ๋ฐฐ์†กํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค(CentOS7+์—๋„ ์žˆ์œผ๋ฏ€๋กœ ํฐ ์œ„ํ—˜์€ ์•„๋‹˜).

--always-copy Gentoo x86_64์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

@jdelgad ์™€ @selurvedu ์œ„์—์„œ ์ œ๊ฐ€ ์ถ”์ฒœํ•œ ๊ฒƒ์„ ์‹œ๋„ํ•ด

@ikiini ์˜ˆ, ํŒจ์น˜๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

@ikiini ์„ฑ๊ณต ํ–ˆ์Šต๋‹ˆ๋‹ค! ์ •๋ง ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ด๊ฒƒ์„ RHEL 7 ๋˜๋Š” ๊ธฐ๋ณธ ๋ถ„๊ธฐ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

+1

์—„์ฒญ๋‚œ. ๋‹ต๋ณ€์ด ๋Šฆ์–ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ @selurvedu ๋ฐ @jdelgad๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” @ikiini ์˜ ํŒจ์น˜๊ฐ€ ์‹ค์ œ๋กœ lib_dir ์—์„œ 'lib' ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ์ธ https://github.com/pypa/virtualenv/issues/338์—์„œ ๋‹ค์‹œ ํšŒ๊ท€ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. 'lib'

CentOS 7 ๋ฐ python 2.7์—์„œ ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์ง€์†๋จ

[root@st2w-master-el7-5696a8a082 ~]# virtualenv no_copy
New python executable in no_copy/bin/python
Installing setuptools, pip, wheel...done.
[root@st2w-master-el7-5696a8a082 ~]# virtualenv --always-copy yes_copy
Cannot find file lib (bad symlink)
New python executable in yes_copy/bin/python
Installing setuptools, pip, wheel...
  Complete output from command /root/yes_copy/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip wheel:
  Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/virtualenv_support/pip-7.1.2-py2.py3-none-any.whl/pip/__init__.py", line 4, in <module>
  File "/usr/lib64/python2.7/logging/__init__.py", line 26, in <module>
    import sys, os, time, cStringIO, traceback, warnings, weakref
ImportError: No module named time
----------------------------------------
...Installing setuptools, pip, wheel...done.
Traceback (most recent call last):
  File "/bin/virtualenv", line 11, in <module>
    sys.exit(main())
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 832, in main
    symlink=options.symlink)
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 1004, in create_environment
    install_wheel(to_install, py_executable, search_dirs)
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 969, in install_wheel
    'PIP_NO_INDEX': '1'
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 910, in call_subprocess
    % (cmd_desc, proc.returncode))
OSError: Command /root/yes_copy/bin/python -c "import sys, pip; sys...d\"] + sys.argv[1:]))" setuptools pip wheel failed with error code 1
[root@st2w-master-el7-5696a8a082 ~]# virtualenv --version
13.1.2
[root@st2w-master-el7-5696a8a082 ~]# ls -rlth yes_copy/
total 0
drwxr-xr-x. 3 root root 22 Jan 13 22:04 lib
drwxr-xr-x. 3 root root 22 Jan 13 22:04 lib64
drwxr-xr-x. 3 root root 22 Jan 13 22:04 include
drwxr-xr-x. 2 root root 49 Jan 13 22:04 bin
[root@st2w-master-el7-5696a8a082 ~]#

@ bwilliams42 - ๊ท€ํ•˜์˜ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์‹ค์ œ๋กœ symlink-ing ๋…ผ๋ฆฌ์— ๋Œ€ํ•œ ๋ฌธ์ œ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ --always-copy๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๊ทผ๋ณธ์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. copyfile์—๋Š” ๊ธฐ๋ณธ๊ฐ’์ด True์ธ "symlink" kwarg๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋…ผ๋ฆฌ๋Š” ํšจ๊ณผ์ ์œผ๋กœ, symlink์ด๋ฉด os.symlink๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด "symlink" kwarg ์—†์ด copyfile์„ ํ˜ธ์ถœํ•˜์—ฌ copyfile ๊ธฐ๋ณธ๊ฐ’์ด symlink=True์ด๊ณ  symlink๊ฐ€ copyfile์— ์˜ํ•ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ „ํ˜€ ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋Š” ๋ฌด์—‡์ด๋“  ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

ํŒจ์น˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•˜์ง€ ์•Š๋‚˜์š”?

   1579         if symlink:                              
   1580             os.symlink(lib_dir, lib64_link)      
   1581         else:                                    
   1582             copyfile(lib_dir, lib64_link, symlink=symlink)

์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  /usr/lib64์— ๋Œ€ํ•œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. RH๊ฐ€ ์ผ๋ถ€ openssl ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์„ ๋•Œ openssl_meth function ์™€ ๊ฐ™์€ ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์ด๊ฒƒ์ด ๊นจ์กŒ์Šต๋‹ˆ๋‹ค(์ €๋Š” ansible์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค). /usr/lib64์˜ ์ „์ฒด ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. @bwilliams42 ์˜ ์™„์ „ํ•œ ์ˆ˜์ •์€ ์•„๋‹ˆ์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜๋ฅผ ๊ฐ€๋ฆฌ์ผฐ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ Centos 7.2์—์„œ ์ง€์†๋ฉ๋‹ˆ๋‹ค. ์ด ํ‹ฐ์ผ“์€ 2.5๋…„ ์ „์— ๋ณด๊ณ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?

๋ˆ„๊ตฐ๊ฐ€ ์ž‘๋™ ์ˆ˜์ •์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์ œ์•ˆ๋œ ์ˆ˜์ • ์‚ฌํ•ญ์ด ํ•˜๋‚˜ ์žˆ์ง€๋งŒ ๋ถ„๋ช…ํžˆ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฑฐ๊ธฐ์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

BTW, ๋‚˜๋Š” ํŒจ๋ธŒ๋ฆญ์˜ ๋„์›€์œผ๋กœ Vagrant ์•„๋ž˜์˜ ํŠน์ˆ˜ VM์˜ ๊ฐ€์ƒ ํ™˜๊ฒฝ์— ํŒŒ์ด์ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•˜๊ณ  ํฌ์žฅํ•˜๋ ค๊ณ  ํ•˜๋ฏ€๋กœ Vagrant + centos box + ๊ฐ„๋‹จํ•œ ํŒจ๋ธŒ๋ฆญ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ฒ„๊ทธ๋ฅผ ์žฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

virtualenv๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ๋‚ด๋ถ€ ์ง€์‹์ด ์—†์œผ๋ฏ€๋กœ ์ง€์นจ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Windows๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๊ณ  ์‹ฌ๋ณผ๋ฆญ ๋งํฌ ๋Œ€ ๋ณต์‚ฌ(๋˜๋Š” ์ด์— ๊ด€๋ จ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š” lib64 ๋””๋ ‰ํ† ๋ฆฌ)์— ๋Œ€ํ•œ ์ „์ฒด ์งˆ๋ฌธ์€ ๊ด€๋ จ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กญ๊ฒŒ๋„(Amazon Linux์— ์žˆ์Œ) virtualenv --always-copy app ์ˆ˜ํ–‰ํ•  ๋•Œ ์ด ์˜ค๋ฅ˜( Cannot find file lib (bad symlink) )๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ mkdir app; cd app; virtualenv --always-copy . ์ˆ˜ํ–‰ํ•  ๋•Œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. app ๊ฐ€ virtualenv์— ์˜ํ•ด ์ƒ์„ฑ๋  ๋•Œ lib64 ๋””๋ ‰ํ† ๋ฆฌ๋กœ ํฌํ•จ๋˜์ง€๋งŒ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— virtualenv๋ฅผ ์ƒ์„ฑํ•˜๋ฉด lib ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

virtualenv.py > def path_locations ๋Š” ๋‹ค์Œ ์ฃผ์„์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

XXX: distutils.sysconfig.get_python_inc/lib๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ
์ ‘๋‘์‚ฌ arg๊ฐ€ ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: http://bugs.python.org/issue3386

์ด ๋ฌธ์ œ๋Š” ์•ฝ 10๋…„ ์ „์— ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์žฌ๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๋‹ค๋ฅธ ๊ฐ๋„๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์•ˆ์ •์ ์ธ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๊ฒฐ์ฝ” ์‰ฌ์šด ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

@kika ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ตœ๊ทผ ํ™œ๋™์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™์œผ๋กœ ์˜ค๋ž˜๋œ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ํ™œ๋™์ด ์—†์œผ๋ฉด ํ์‡„๋ฉ๋‹ˆ๋‹ค. ๊ณ„์† ์—ด์–ด๋‘๊ณ  ์‹ถ๋‹ค๋ฉด ๋Œ“๊ธ€์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํ˜„์žฌ #1366๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์—ฌ์ „ํžˆ ๋ณต์ œํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‹ค์‹œ ์—ด๊ฒ ์Šต๋‹ˆ๋‹ค.

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