Virtualenv失败,“不以前缀开头”

时间:2018-12-14 01:07:34

标签: python virtualenv

我刚刚从github下载了python 3.6.1并将其构建在本地目录中。现在,我正在尝试使用该版本的python创建virtualenv,但我不断得到:

Running virtualenv with interpreter /home/giorgio/tools/cpython-3.6.1/python
Using base prefix '/usr/local'
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 2462, in <module>
    main()
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 762, in main
    symlink=options.symlink,
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 998, in create_environment
    install_python(home_dir, lib_dir, inc_dir, bin_dir, site_packages=site_packages, clear=clear, symlink=symlink)
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 1219, in install_python
    copy_required_modules(home_dir, symlink)
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 1147, in copy_required_modules
    dst_filename = change_prefix(filename, dst_prefix)
  File "/usr/lib/python2.7/site-packages/virtualenv.py", line 1111, in change_prefix
    assert False, "Filename {} does not start with any of these prefixes: {}".format(filename, prefixes)
AssertionError: Filename /home/giorgio/tools/cpython-3.6.1/Lib/os.py does not start with any of these prefixes: ['/usr/local', '/usr/local']

我不想在系统上全局安装此版本的python。还有另一种方法可以使virtualenv起作用吗?

3 个答案:

答案 0 :(得分:1)

我认为Python 3.6引入了一种创建虚拟环境的新方法,该虚拟环境不依赖于通过usr / local进行路由。

python3 -m venv /path/to/new/virtual/environment

Here是文档。

答案 1 :(得分:1)

我在尝试使用 brew 安装的 Python 3.9.5 版本在 macOS 上创建新的虚拟环境时遇到了这个错误。 (virtualenvwrappermkvirtualenv -p python3 [env-name]

我的命令格式通常是:

pip3 install virtualenvwrapper

不知道是什么导致这个问题搞砸了,但最终我通过运行让它再次工作:

    List<Div> divs = new ArrayList<>();

    divs.add(new Div(new Bubble()));
    divs.add(new FunnelChart());
    divs.add(new PieWithLegend());
    divs.add(new Bubble());
    divs.add(new FunnelChart());
    divs.add(new PieWithLegend());


    divs.add(new Div(new Span("AAAAAA")));
    divs.add(new Div(new Span("BBBBBB")));
    divs.add(new Div(new Span("CCCCCC")));
    divs.add(new Div(new Span("DDDDDD")));
    divs.add(new Div(new Span("EEEEEE")));
    divs.add(new Div(new Span("FFFFFF")));


    List<DragSource<Div>> cards = new ArrayList<>();
    for (int i = 0; i < divs.size(); i++) {
        DragSource<Div> temp = DragSource.create(divs.get(i));
        cards.add(temp);
        cards.get(i).setDragData(true);
    }
    VerticalLayout board = new VerticalLayout();
    HorizontalLayout row1 = new HorizontalLayout();
    row1.setWidthFull();
    row1.add(divs.get(0), divs.get(1), divs.get(3));
    HorizontalLayout row2 = new HorizontalLayout();
    row2.setWidthFull();
    row2.add(divs.get(4));
    row2.add(divs.get(5));
    row2.add(divs.get(6));
    HorizontalLayout row3 = new HorizontalLayout();
    row3.setWidthFull();
    row3.add(divs.get(7));
    row3.add(divs.get(8));
    row3.add(divs.get(9));
    board.add(row1, row2, row3);
    add(board);


    add(new Div(new Span("NOOOOOOOO")));

答案 2 :(得分:0)

实现此目的的正确方法是在将构建选项配置为本地目录并执行make install时设置前缀。因此,如果您要安装的目录是$HOME/pythons,则在构建目录中运行:

./configure --prefix="${HOME}/pythons"
make
make install