python - 尝试设置 virtualenv 在安装 vatic 时出现错误 'cannot import name _remove_dead_weakref'

标签 python python-2.7 virtualenv

我正在尝试安装 vatic,其中一个要求是从 vatic 工作区运行“virtualenv .env”。当我运行它时,我得到 ~/anaconda2/lib/python2.7/weakref.py 有一个错误“无法导入 name_remove_dead_weakref。

virtualenv .env
New python executable in /home/tyler/vatic_ws/.env/bin/python
Installing setuptools, pip, wheel...
    Complete output from command /home/tyler/vatic_ws/.env/bin/python - setuptools pip wheel:
      Traceback (most recent call last):
      File "<stdin>", line 7, in <module>
      File "/home/tyler/anaconda2/lib/python2.7/site-packages/virtualenv_support/pip-9.0.1-py2.py3-none-any.whl/pip/__init__.py", line 5, in <module>
      File "/home/tyler/anaconda2/lib/python2.7/logging/__init__.py", line 26, in <module>
        import sys, os, time, cStringIO, traceback, warnings, weakref, collections
      File "/home/tyler/anaconda2/lib/python2.7/weakref.py", line 14, in <module>
        from _weakref import (
    ImportError: cannot import name _remove_dead_weakref

但是当我尝试运行我自己的 python 脚本时

from _weakref import _remove_dead_weakref

我没有收到错误。为什么我无法复制错误,我该如何解决?

最佳答案

Brandon Rhodes has solved this problem .
描述的相关部分:

# How does the Anaconda Python binary usually wind up linking to their
# own "libpython2.7.so" instead of Ubuntu's?  By, it turns out, having a
# relative RPATH - that only works if their Python binary is sitting
# right next to the "lib" directory containing their libpython:
#
# $ readelf -d anaconda/bin/python2.7 | grep RPATH
# 0x0000000f (RPATH)                      Library rpath: [$ORIGIN/../lib]
#
# This situation obviously does not pertain in a new virtualenv since it
# only copies in a minimal ".../lib/pythonX.Y" directory, not any shared
# libraries into "../lib" itself.  Hence the linker falls back to
# discovering and linking to the system "libpythonX.Y.so".

你需要运行他的脚本。我会在此处复制脚本以防它消失。

if ! python -c 'import virtualenv' 2>/dev/null
then
    echo 'Error: virtualenv is not available to the current "python" binary'
    exit 1
fi

venv=$(python -c 'import virtualenv; print(virtualenv.__file__)')
venv=${venv%c}

if grep -q 'Added by Brandon' $venv
then
    echo 'Exiting: virtualenv.py has already been fixed'
    exit 0
fi

echo 'Editing virtualenv.py'

sed -i -f - $venv <<'EOF'
/^    stdlib_dirs = /i\
\
    # Added by Brandon's ",fix-virtualenv" script to copy the Anaconda\
    # libpython libraries into the new environment as well:\
    outer_lib_dir = os.path.dirname(lib_dir)\
    conda_lib_dir = os.path.dirname(os.path.dirname(os.__file__))\
    for fn in os.listdir(conda_lib_dir):\
        if fn.startswith('libpython'):\
            copyfile(join(conda_lib_dir, fn), join(outer_lib_dir, fn), symlink)\
EOF

关于python - 尝试设置 virtualenv 在安装 vatic 时出现错误 'cannot import name _remove_dead_weakref',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47422112/

相关文章:

python - virtualenv 中的配置位置

python - MySQL:如何确保始终选择唯一记录

python-3.x - RHEL7 导入 tkinter 在 vi​​rtualenv 中失败

python - python中列表列表之间的叉积

python - pyaudio 可以同时播放两个音符吗?

python - ImportError : numpy. core.multiarray 导入失败

python - 如何减少 python 中的元组列表

python - 导入错误 : No module named flask

Python:防止 python 索引数组。列表索引必须是整数

python - 使用 3 个常量查找所有可能的排列