设置Virtualenv的问题

时间:2011-05-06 05:58:38

标签: python django virtualenv

我正在尝试使用Python 2.6.5在Ubuntu 10.04上设置virtualenv但有一些问题。

在用pip安装了virtualenv和virtualenv包装器后,我正在运行命令:virtualenv mysite-env --verbose

我收到以下错误:

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'

如果我再次运行它,我会得到以下结果:

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

任何想法如何解决这个问题?谢谢!

4 个答案:

答案 0 :(得分:5)

自从你问这个以来,似乎有点像。 / vagrant目录的Virtualbox文件驱动程序无法识别virtualenv大量使用的符号链接。

这可以通过简单的

得到最好的证明
mybox:/vagrant$ ln -s ~/.bashrc
ln: failed to create symbolic link ./.bashrc': Protocol error`

更新

由于流浪汉与符号链接的不兼容性&amp; virtualenv,我的流浪盒/实例是任务/项目特定的(只有1个virtualenv)。所以在vagrant host side / instance文件夹中我会保留一个简短的脚本来安装python&amp; virtualenv,然后做

pip install -r /vagrant/requirement

可在此处找到更多文档。 https://docs.vagrantup.com/v2/provisioning/basic_usage.html

使用适当的bash if检查(存在python,/ home / vagrant / env存在),你可以配置你的盒子一次,然后附加一个调用来激活你的〜/ env安装,这样当你登录,您已经设置并准备好了。

答案 1 :(得分:2)

发生此错误是因为您使用的virtualenv.py文件与您正在使用的python版本不兼容。 对于python2.7,您需要从virtualenv.org站点下载二进制文件,然后使用

编译它们。
python setup.py install

安装后使用已安装的二进制文件(不是virtualenv.py文件)来创建虚拟环境

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

答案 2 :(得分:1)

这个问题已有几个答案,但我想分享我的解决方案,以防它帮助下一个人。

我在哪里运行命令很重要。我在/ vagrant共享文件夹中运行virtualenv env命令。那是我的错。当我回到我的HOME目录,然后运行virtualenv env,一切正常。

答案 3 :(得分:0)

我没有碰到这个特定问题,但我个人已经从使用virtualenv切换到pythonbrewpythonbrew是针对同一问题的不同解决方案;它更像是Ruby社区中的rvm:它在$HOME/.pythonbrew下从头开始构建完全自包含的Python版本;然后,它提供了shell函数,允许您轻松地从一个切换到另一个(为您编辑路径等)。它不像virtualenv那样轻量级,但它也不会依赖于系统Python,因此整个符号链接问题就会消失。您也可以安装多个Python版本,即使它们未安装在基本系统中也是如此。

当然,您的里程可能会有所不同,但pythonbrew对我来说效果很好。

相关问题