В CentOS 6.5 (python2.7 из SCL):
[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]$
Я тоже сталкиваюсь с этой проблемой, но в качестве обходного пути вы можете добавить no-setuptools
чтобы не устанавливать pip в свой virtualenv. Эта проблема связана с установкой pip / setuptools в новый файл virtualenv.
Информация о моей версии:
Вот полный подробный вывод при сбое:
[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)
Этот журнал бесполезен, потому что у меня нет полного пути к файлу, который он не может найти. Поэтому я взломал virtualenv.py
чтобы распечатать os.path.abspath
для этого файла и получил:
Cannot find file /home/vagrant/lib (bad symlink)
Он ищет папку lib
в текущем рабочем каталоге.
то же самое здесь, на Centos7 со стандартным питоном 2.7
$ 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
То же самое. Используя --always-copy
в CentOS 6.5, в системе Python 2.6 получается тот же ImportError: No module named time
как упоминалось.
решение - забыть о параметре --always-copy в дистрибутивах на основе EL.
похоже, есть опечатка в выполняющейся в данный момент функции 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)
Поздно, но надеюсь, что это поможет
У меня такая же проблема, используя CentOS 7.1 с флагами --no-setup-tools
и --always-copy
. Я бы хотел, чтобы это было исправлено, так как я упаковываю virtualenv и отправляю их клиентам (которые также находятся на CentOS7 +, поэтому это не большой риск).
То же самое здесь, в Gentoo x86_64 с --always-copy
.
@jdelgad и @selurvedu вы пробовали то, что я рекомендовал выше?
@ikiini Да, ваш патч решает проблему.
@ikiini Это сработало! Большое спасибо. Теперь нужно либо перенести это в RHEL 7, либо в основную ветку.
+1
отличный. Извините за задержку с ответом .. но добро пожаловать @selurvedu и @jdelgad.
Единственная проблема, похоже, заключается в том, что патч https://github.com/pypa/virtualenv/issues/338, когда он фактически был изменен с lib_dir
на '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 - Ваше изменение действительно ссылок . Однако, когда не используется --always-copy, все в корне ломается. Обратите внимание, что файл-копия имеет kwarg "символической ссылки", значение по умолчанию которого равно True. Следующая логика эффективна: если символическая ссылка, вызовите os.symlink, иначе вызовите copyfile без "символической ссылки" kwarg, что приведет к тому, что для файла-копии будет установлено значение symlink = True, а символическая ссылка будет создана с помощью 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, это было сломано (я использовал ansible) с ошибкой, указывающей что-то вроде openssl_meth function
. Я исправил это, сделав глубокую копию / usr / lib64. Не полное исправление @ bwilliams42, но указал мне правильное направление.
Проблема все еще сохраняется на Centos 7.2. Об этом билете сообщили 2,5 года назад. Вроде это очень серьезная проблема. Как я могу помочь исправить это?
Кому-то нужно предоставить исправление. Здесь было предложено одно исправление, но, по-видимому, у него есть пара проблем. Предлагаю начать с этого.
Кстати, я пытаюсь собрать и упаковать свое приложение python в виртуальный env на специальной виртуальной машине под Vagrant с помощью ткани, поэтому довольно легко воспроизвести эту ошибку с помощью 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
Этот вопрос решен лет десять назад. Может быть, пересмотреть его использование?
Просто даю другой ракурс; Написание надежного исправления для всех платформ - задача не из легких.
@kika Большое спасибо.
Эта проблема была автоматически помечена как устаревшая, поскольку в последнее время не было активности. Он будет закрыт, если больше не будет активности. Просто добавьте комментарий, если хотите, чтобы он оставался открытым. Спасибо за ваш вклад.
Это становится устаревшим с # 1366 сейчас в полном разгаре. Мы откроемся снова, если кто-то еще сможет повторить это.
Самый полезный комментарий
Интересно, что (я использую Amazon Linux), когда я делаю
virtualenv --always-copy app
я получаю эту ошибку (Cannot find file lib (bad symlink)
), но когда я делаюmkdir app; cd app; virtualenv --always-copy .
я этого не делаю. И, кажется, я понимаю, почему - когдаapp
создается virtualenv, он имеетlib64
в качестве каталога, но когда я создаю virtualenv в текущем каталоге, он становится ссылкой наlib
.