简体   繁体   English

设置Virtualenv的问题

[英]Problem Setting Up A Virtualenv

I'm trying to set up a virtualenv on Ubuntu 10.04 with Python 2.6.5 but having some issues. 我正在尝试使用Python 2.6.5在Ubuntu 10.04上设置virtualenv,但有一些问题。

After having installed virtualenv and virtualenv wrapper with pip, I'm running the command: virtualenv mysite-env --verbose 在用pip安装virtualenv和virtualenv包装器后,我正在运行命令:virtualenv mysite-env --verbose

I get the following error: 我收到以下错误:

Creating mysite-env/lib/python2.6
Symlinking Python bootstrap modules
  Symlinking mysite-env/lib/python2.6/lib-dynload
  Symlinking mysite-env/lib/python2.6/config
  Symlinking mysite-env/lib/python2.6/os.py
  Ignoring built-in bootstrap module: posix
  Symlinking mysite-env/lib/python2.6/posixpath.py
  Cannot import bootstrap module: nt
  Symlinking mysite-env/lib/python2.6/ntpath.py
  Symlinking mysite-env/lib/python2.6/genericpath.py
  Symlinking mysite-env/lib/python2.6/fnmatch.py
  Symlinking mysite-env/lib/python2.6/locale.py
  Symlinking mysite-env/lib/python2.6/encodings
  Symlinking mysite-env/lib/python2.6/codecs.py
  Symlinking mysite-env/lib/python2.6/stat.py
  Symlinking mysite-env/lib/python2.6/UserDict.py
  Symlinking mysite-env/lib/python2.6/lib-dynload/readline.so
  Symlinking failed, copying to mysite-env/lib/python2.6/lib-dynload/readline.so
Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 9, in <module>
    load_entry_point('virtualenv==1.6.1', 'console_scripts', 'virtualenv')()
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 795, in main
    never_download=options.never_download)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 886, in create_environment
    site_packages=site_packages, clear=clear))
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 1020, in install_python
    copy_required_modules(home_dir)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 974, in copy_required_modules
    copyfile(filename, dst_filename)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 414, in copyfile
    copyfileordir(src, dest)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 391, in copyfileordir
    shutil.copy2(src, dest)
  File "/usr/lib/python2.6/shutil.py", line 99, in copy2
    copyfile(src, dst)
  File "/usr/lib/python2.6/shutil.py", line 53, in copyfile
    fdst = open(dst, 'wb')
IOError: [Errno 20] Not a directory: 'mysite-env/lib/python2.6/lib-dynload/readline.so'

If I run it again, I get the following: 如果我再次运行它,我得到以下内容:

Directory mysite-env/lib/python2.6 already exists
    Symlinking Python bootstrap modules
      Ignoring built-in bootstrap module: posix
      Cannot import bootstrap module: nt
      Symlinking mysite-env/lib/python2.6/lib-dynload/readline.so
      Symlinking mysite-env/lib/python2.6/copy_reg.py
      Symlinking mysite-env/lib/python2.6/types.py
      Symlinking mysite-env/lib/python2.6/re.py
      Symlinking mysite-env/lib/python2.6/sre.py
      Symlinking mysite-env/lib/python2.6/sre_parse.py
      Symlinking mysite-env/lib/python2.6/sre_constants.py
      Symlinking mysite-env/lib/python2.6/sre_compile.py
      Ignoring built-in bootstrap module: zlib
      Symlinking mysite-env/lib/python2.6/warnings.py
      Symlinking mysite-env/lib/python2.6/linecache.py
      Symlinking mysite-env/lib/python2.6/_abcoll.py
      Symlinking mysite-env/lib/python2.6/abc.py
    Creating mysite-env/lib/python2.6/site-packages
    Writing mysite-env/lib/python2.6/site.py
    Writing mysite-env/lib/python2.6/orig-prefix.txt
    Creating parent directories for mysite-env/include
    Symlinking mysite-env/include/python2.6
    Creating mysite-env/bin
    New python executable in mysite-env/bin/python
    Changed mode of mysite-env/bin/python to 0755
    Testing executable with mysite-env/bin/python -c "import sys; print(sys.prefix)"
    ERROR: The executable mysite-env/bin/python is not functioning
    ERROR: It thinks sys.prefix is u'/usr' (should be '/vagrant/mysite-env')
    ERROR: virtualenv is not compatible with this system or executable

Any ideas how to fix this? 任何想法如何解决这一问题? Thanks! 谢谢!

Seems like its been a bit since you asked this. 看起来有点像你问过这个问题。 Virtualbox's file driver for the /vagrant directory cannot recognize symbolic links which virtualenv uses a lot. / vagrant目录的Virtualbox文件驱动程序无法识别virtualenv大量使用的符号链接。

This can be best demonstrated with a simple 这可以通过简单的方式得到最好的证明

mybox:/vagrant$ ln -s ~/.bashrc
ln: failed to create symbolic link ./.bashrc': Protocol error`

Update: 更新:

Because of vagrant's incompatibility with symbolic links & virtualenv, my vagrant boxes/instances were task/project specific ( only 1 virtualenv). 由于流浪汉与符号链接和virtualenv不兼容,我的流浪盒/实例是任务/项目特定的(只有1个virtualenv)。 So in the vagrant host side/instance folder I would keep a short script to install python & virtualenv, then do 所以在vagrant host side / instance文件夹中我会保留一个简短的脚本来安装python和virtualenv,然后做

pip install -r /vagrant/requirement

Further documentation can be found here. 可在此处找到更多文档。 https://docs.vagrantup.com/v2/provisioning/basic_usage.html https://docs.vagrantup.com/v2/provisioning/basic_usage.html

with the appropriate bash if checks ( does python exist, does /home/vagrant/env exist ), you can provision your box once and then append a call to activate your ~/env install so that when you login, your already setup and ready to go. 使用适当的bash if检查(存在python,/ home / vagrant / env存在),你可以配置你的盒子一次,然后附加一个调用来激活你的〜/ env安装,这样当你登录时,你已经设置好了去。

This error occurs because the virtualenv.py file you are using is not compatible with the python version that you are using.. For python2.7 you need to downalod the binaries from the virtualenv.org site and then compile them using 发生此错误是因为您使用的virtualenv.py文件与您正在使用的python版本不兼容..对于python2.7,您需要从virtualenv.org站点下载二进制文件,然后使用它们编译它们

python setup.py install

after the installation use the installed binary(not the virtualenv.py file) to create virtual environment by 安装后使用已安装的二进制文件(而不是virtualenv.py文件)来创建虚拟环境

virtualenv --no-site-packages <path to virtual env directory>/env/

This issue already has several answers, but I want to share my solution, in case it helps the next person. 这个问题已有几个答案,但我想分享我的解决方案,以防它帮助下一个人。

Where I run the command matters. 我在哪里运行命令很重要。 I was running the virtualenv env command inside the /vagrant shared folder. 我在/ vagrant共享文件夹中运行virtualenv env命令。 That was my mistake. 那是我的错。 When I cd back to my HOME dir, then run virtualenv env, everything works fine. 当我回到我的HOME目录,然后运行virtualenv env,一切正常。

I haven't run across this particular problem, but I've personally switched from using virtualenv to pythonbrew . 我没有碰到这个特殊的问题,但我个人已经从使用virtualenv切换到pythonbrew pythonbrew is a different solution to the same problem; pythonbrew是针对同一问题的不同解决方案; it works more like rvm in the Ruby community: It builds entirely self-contained versions of Python, from scratch, under $HOME/.pythonbrew ; 它更像是Ruby社区中的rvm :它在$HOME/.pythonbrew下从头开始构建完全自包含的Python版本; then, it provides shell functions that allow you to switch easily from one to another (editing the path for you, etc.). 然后,它提供了shell函数,允许您轻松地从一个切换到另一个(为您编辑路径等)。 It's not as lightweight as virtualenv , but it also doesn't piggyback on the system Python, so the whole symlink issue goes away. 它不像virtualenv那样轻量级,但它也不会依赖于系统Python,因此整个符号链接问题就消失了。 You can also install multiple Python versions, even if they're not installed in the base system. 您也可以安装多个Python版本,即使它们未安装在基本系统中也是如此。

Your mileage may vary, of course, but pythonbrew has been working well for me. 当然,你的里程可能会有所不同,但pythonbrew对我来说一直很好。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM