【问题标题】:Virtualenv keeps being built by python 2 rather than python 3Virtualenv 一直由 python 2 而不是 python 3 构建
【发布时间】:2019-06-12 04:09:16
【问题描述】:

在尝试为 python 创建虚拟环境时,我不断收到以下错误。在我看来,virtualenv/pip 默认使用 python 2,而不是在构建环境时。 该环境是 python2 制作的,但它是 制作的蟒蛇2。我认为这是问题所在,感谢任何帮助。

[brad@reason Attack_Analysis]$ virtualenv -p /usr/local/bin/python3.7 venv
Running virtualenv with interpreter /usr/local/bin/python3.7
Using base prefix '/usr/local'
New python executable in /home/brad/Development/Attack_Analysis/venv/bin/python3.7
Also creating executable in /home/brad/Development/Attack_Analysis/venv/bin/python
Installing setuptools, pip, wheel...

  Complete output from command /home/brad/Developme...s/venv/bin/python3.7 - setuptools pip wheel:
  Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
  File "/home/brad/.local/lib/python2.7/site-packages/virtualenv_support/pip-18.1-py2.py3-none-any.whl/pip/_internal/__init__.py", line 40, in <module>
  File "/home/brad/.local/lib/python2.7/site-packages/virtualenv_support/pip-18.1-py2.py3-none-any.whl/pip/_internal/cli/autocompletion.py", line 8, in <module>
  File "/home/brad/.local/lib/python2.7/site-packages/virtualenv_support/pip-18.1-py2.py3-none-any.whl/pip/_internal/cli/main_parser.py", line 12, in <module>
  File "/home/brad/.local/lib/python2.7/site-packages/virtualenv_support/pip-18.1-py2.py3-none-any.whl/pip/_internal/commands/__init__.py", line 6, in <module>
  File "/home/brad/.local/lib/python2.7/site-packages/virtualenv_support/pip-18.1-py2.py3-none-any.whl/pip/_internal/commands/completion.py", line 6, in <module>
  File "/home/brad/.local/lib/python2.7/site-packages/virtualenv_support/pip-18.1-py2.py3-none-any.whl/pip/_internal/cli/base_command.py", line 18, in <module>
  File "/home/brad/.local/lib/python2.7/site-packages/virtualenv_support/pip-18.1-py2.py3-none-any.whl/pip/_internal/download.py", line 38, in <module>
  File "/home/brad/.local/lib/python2.7/site-packages/virtualenv_support/pip-18.1-py2.py3-none-any.whl/pip/_internal/utils/glibc.py", line 3, in <module>
  File "/usr/local/lib/python3.7/ctypes/__init__.py", line 7, in <module>
    from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 11, in <module>
ImportError: cannot import name 'main' from 'pip' (/home/brad/.local/lib/python2.7/site-packages/virtualenv_support/pip-18.1-py2.py3-none-any.whl/pip/__init__.py)
----------------------------------------
...Installing setuptools, pip, wheel...done.
Traceback (most recent call last):
  File "/home/brad/.local/lib/python2.7/site-packages/virtualenv.py", line 2438, in <module>
    main()
  File "/home/brad/.local/lib/python2.7/site-packages/virtualenv.py", line 768, in main
    symlink=options.symlink,
  File "/home/brad/.local/lib/python2.7/site-packages/virtualenv.py", line 1030, in create_environment
    install_wheel(to_install, py_executable, search_dirs, download=download)
  File "/home/brad/.local/lib/python2.7/site-packages/virtualenv.py", line 983, in install_wheel
    call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=script)
  File "/home/brad/.local/lib/python2.7/site-packages/virtualenv.py", line 861, in call_subprocess
    raise OSError("Command {} failed with error code {}".format(cmd_desc, proc.returncode))
OSError: Command /home/brad/Developme...s/venv/bin/python3.7 - setuptools pip wheel failed with error code 1

我的 vitualenv 是最新的

[brad@reason Attack_Analysis]$ virtualenv --version
16.2.0

我的 pip 已更新,但它似乎适用于 python 2,而不是 3。如何让它适用于 python 3?我在 redhat 7.5 上通过 make install 安装。

[brad@reason Attack_Analysis]$ pip --version
pip 18.1 from /usr/lib/python2.7/site-packages/pip (python 2.7)

在使用pip3的时候,好像发现没有root,但是没有root,所以我的pip3已经过时了。当我需要 root 来执行此操作并遇到此问题时,不确定如何更新它。

[brad@reason ~]$ pip3 --version
pip 9.0.3 from /usr/local/lib/python3.6/site-packages (python 3.6)
[brad@reason ~]$ sudo pip3 install --upgrade pip
[sudo] password for brad: 
sudo: pip3: command not found

我的 PYTHONPATH 是空的。应该是吗?我不认为我以前更改过这个,不确定这是否是一个问题。

[brad@reason ~]$ echo $PYTHONPATH

[brad@reason ~]$

【问题讨论】:

  • 不确定错误,但您可以尝试 pip3 而不是 pip
  • echo $PYTHONPATH
  • "[brad@reason ~]$ echo $PYTHONPATH" 返回一个空行,我认为这是错误的,应该是什么?
  • 附带说明,我建议使用pipenv 而不是virtualenv。这是当今事实上的标准。 Python.org 本身在其管理应用程序依赖项的指南中使用 pipenvpackaging.python.org/tutorials/managing-dependencies
  • 我最终使用了 pipenv,并且能够让一切正常工作。我觉得我应该能够使用 virtualenv,因为我喜欢它。我不喜欢 pipenv 将我的环境文件放在哪里,我喜欢 virtualenv 在提示符中清楚地显示我在环境中。无论如何, pipenv 确实有效,这是最重要的。感谢您的帮助@JChris。

标签: python-3.x python-2.7 pip virtualenv


【解决方案1】:

这就是我解决这个问题的方法(在 Linux 上):

apt install python3-pip
pip3 install virtualenv

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2017-10-03
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多