【问题标题】:virtualenv python broke after upgrading ubuntu 15.10 to 16.04将 ubuntu 15.10 升级到 16.04 后 virtualenv python 崩溃了
【发布时间】:2016-08-16 06:22:12
【问题描述】:

我的 virtualenv 中有 python 3.4,但是在将 ubuntu 升级到 16.04 后,python 升级到了 3.5,所以 virtualenv 中的 python 崩溃并出现以下错误:

Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'

Current thread 0x00007f2f2dbcb700 (most recent call first):
fish: “python” terminated by signal SIGABRT (Abort)

我该如何解决?

【问题讨论】:

  • 您是否尝试过重新安装 Python 3.5? encodings 模块是基础安装的一部分。

标签: python ubuntu virtualenv


【解决方案1】:

我通过创建一个新的 virtualenv 并将 python 可执行文件复制到旧的损坏的 virtualenv 来修复它。

【讨论】:

    【解决方案2】:

    我通过安装最小的工作 python3.4 解决了这个问题,这样我的 virtualenv 工作得足够好来获取包列表,然后用 python3.5 做了一个新的......如下:

    获取python3.4最小包:

    wget http://launchpadlibrarian.net/221250032/python3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb
    wget http://launchpadlibrarian.net/221250033/libpython3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb
    sudo dpkg -i --force-breaks libpython3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb
    sudo dpkg -i python3.4-minimal_3.4.3-1ubuntu1~14.04.3_amd64.deb
    

    我的 virtualenv 在这里:~/virtualenv/example

    获取您的 virtualenv 中的包列表(现在应该可以很好地完成此任务,但可能无法正常执行其他操作):

    source ~/virtualenv/example/bin/activate
    pip freeze > /tmp/requirements.txt
    deactivate 
    

    摆脱python3.4,回到Ubuntu 16.04的首选状态:

    sudo dpkg --purge python3.4-minimal
    sudo dpkg --force-depends --purge libpython3.4-minimal
    

    使用正确的包创建一个新的 virtualenv:

    virtualenv -p python3.5 example
    source ~/virtualenv/example/bin/activate
    pip install -r /tmp/requirements.txt
    

    现在应该可以使用所有旧包,但在 python3.5 中。应该...

    另见Upgrade python in a virtualenv

    【讨论】:

      【解决方案3】:

      我今天遇到了同样的问题,我就是这样解决的:

      问题: 首先,据我了解,出现问题是因为升级到 Ubuntu 16.04 后,以前版本的 Python 也升级了。因此,任何 Python3 环境中的符号链接都不再起作用。

      解决方案 1: 正如上面所写,直接的解决方案是删除所有 Python3 环境并重新创建它们。我不喜欢它,因为这是我在升级 Ubuntu 后第二次这样做。也可能我需要在未来的项目中使用多个 Python 3 版本。

      解决方案 2: 这就是我今天尝试的方法,并且运行良好。我决定尝试组合pyenv + pyenv-virtualenv,而不是使用virtualenv + virtualenvwrapper。

      两种方法的主要区别在于:

      Pyenv 实际上复制了整个 Python 每次创建新的 pyenv 版本时安装。相比之下, virtualenv 利用符号链接来减小 virtualenv 的。

      操作方法:

      1. 按照here 的说明安装 pyenv 以及所需的 Python 2 和 3 版本。
      2. 查看here,了解如何使用 pyenv 处理 virtualenv。
      3. 创建新环境,使用 pip 安装所有依赖项,并希望在下次 Ubuntu 升级期间忘记符号链接损坏的问题。

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,我设法通过重新创建 virtualenv 并使用 pip 重新安装所需的包来“修复”。

        创建一个新的虚拟环境:

        virtualenv <new-virtualenv>
        

        激活它:

        source <new-virtualenv>/bin/activate
        

        安装包:

        pip install <required-packages>
        

        我很高兴再去一次!

        您可以通过重命名文件夹来保留旧的 virtualenv:

        mv <old-virtualenv> <old-virtualenv>-backup
        

        【讨论】:

        • 有没有办法从损坏的 virtualenv 中提取 pip 包列表?
        【解决方案5】:

        我有同样的问题,我解决了重新创建整个 virtualenv

        PS:对不起我的英语不好。

        【讨论】:

        • 如何将 django 项目移动到另一个 virtualenv 并使其工作?
        • 你只需要创建一个新的 virtualenv 并在该 virtualenv 中重新安装依赖项,仅此而已。
        猜你喜欢
        • 1970-01-01
        • 2016-04-04
        • 2019-01-02
        • 2022-08-18
        • 2016-08-16
        • 2019-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多