Virtualenv: OSError: [Errno 30] 只读文件系统

创建于 2011-12-27  ·  27评论  ·  资料来源: pypa/virtualenv

尝试创建新环境时,我开始遇到一个奇怪的错误:

Traceback (most recent call last):
     File "/usr/local/bin/virtualenv", line 9, in <module>
       load_entry_point('virtualenv==1.7', 'console_scripts', 'virtualenv')()
     File "/usr/local/lib/python2.7/dist-packages/virtualenv.py", line 928, in main
       never_download=options.never_download)
     File "/usr/local/lib/python2.7/dist-packages/virtualenv.py", line 1029, in create_environment
       site_packages=site_packages, clear=clear))
     File "/usr/local/lib/python2.7/dist-packages/virtualenv.py", line 1145, in install_python
       fix_local_scheme(home_dir)
     File "/usr/local/lib/python2.7/dist-packages/virtualenv.py", line 1430, in fix_local_scheme
       os.symlink(os.path.abspath(home_dir), local_path)
OSError: [Errno 30] Read-only file system

在任何其他情况下,我似乎都没有创建符号链接的问题。

我正在通过 Virtualbox 运行 Ubuntu 11.04 - 我尝试从头开始销毁和重建盒子(使用未更改的 puppet 清单),但同样的错误仍然存​​在。

最有用的评论

将 virtualenv 升级到最新版本(1.11.6),并将其用作

virtualenv --always-copy testenv

选项不会使用硬链接,而是复制文件

所有27条评论

恐怕我在这里无能为力,因为我无法重现失败。 我不知道为什么您会收到只读文件系统错误,除非您尝试在其上创建 virtualenv 的文件系统实际上是只读的。

此代码在 virtualenv 的开发版本中已更改,因此您可以尝试使用 virtualenv==dev 看看是否有帮助。

我在 Virtualbox 上的 Ubuntu 11.04 上也遇到了这个问题。 @rlayte如果您知道如何解决此问题,我很想知道如何解决。

我很确定这是一个虚拟机问题,所以如果你想要一个真正的解决方案,可能应该与他们一起提出。

我通过将 .virtualenvs 目录移动到非共享文件夹来“解决”它,因为问题仅存在于与 os x 共享的文件夹中。

由于这种不稳定性,我最终决定离开 virtualbox。

我最终在 OSX 中授予共享文件夹组写入权限,然后在 Ubuntu 中重新安装它,它似乎解决了问题。

哎呀,刚才遇到了这个问题,但我认为这是一个 VirtualBox 错误: https ://www.virtualbox.org/ticket/10085#comment :12

出于安全原因,基本上符号链接不再在共享文件夹中工作。

当问题由共享文件夹创建时,可以通过运行以下命令在 virtualbox 上解决此问题:

virtualenv ~/[my-env-name]
source ~/[my-env-name]/bin/activate

这不会将您的环境存储在您的文件夹中,但最佳做法是使用 requirements.txt 并告诉您的 VCS 忽略您的环境树

更新:当然,睡个好觉会让一切变得更清晰。 将 python-dev 安装为 sudo 更改了一些导致 virtualenv 命令失败的 Python 文件中的权限,但我可以将其作为 sudo 运行并且它可以工作。

我看到了同样的错误。 如果我从基本 lucid32 框创建一个新的 VM,然后执行以下命令:

  • sudo apt-get install python-pip
  • sudo pip install virtualenv
  • cd /vagrant/
  • virtualenv test0
  • sudo apt-get install python-dev
  • virtualenv test1

然后第一个 virtualenv 将成功创建,但第二个将失败并显示上述[Errno 30] Read-only file system 。 我在此处发布了此过程的完整输出: https://gist.github.com/3346994。 (对于 mysql-python,我需要 python-dev。)

有谁知道我可以如何解决/解决这个问题? 我强烈希望继续使用共享文件夹,这似乎与 VirtualBox 的问题不同。 谢谢,如果我能提供更多信息,请告诉我!

sudo pip install virtualenv==dev为我做了诀窍。 我在 OS X Lion 主机和 Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-23-generic x86_64) 作为访客。

当我尝试设置新的 VM 时,我再次注意到这一点,似乎 virtualenv 1.8.2 和 1.8.3 之间的更改导致该错误再次出现:

vagrant<strong i="6">@lucid32</strong>:/vagrant$ virtualenv test
New python executable in test/bin/python
Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 9, in <module>
    load_entry_point('virtualenv==1.8.3', 'console_scripts', 'virtualenv')()
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 961, in main
    never_download=options.never_download)
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 1062, in create_environment
    site_packages=site_packages, clear=clear))
  File "/usr/local/lib/python2.6/dist-packages/virtualenv.py", line 1482, in install_python
    os.symlink(py_executable_base, full_pth)
OSError: [Errno 30] Read-only file system

我现在可以使用 1.8.2,但我想在这里提一下。 谢谢!

@lehrblogger你能运行strace -f virtualenv test来查明导致错误的路径吗?

@brentsmyth相关位不存在。 使用 pastebin 或 gist。

更好的主意...

http://pastebin.com/imzmMYFj

@g2p !! 抱歉,我花了这么长时间才知道,我正在旅行,一定错过了电子邮件。

https://gist.github.com/4211296

我正在运行 Mac OS X 10.8.2,刚刚升级到最新版本的 VirtualBox (4.2.4) 和 Vagrant (1.0.5)。 如果有帮助,我很乐意提供更多信息,我保证我会尽快回复:)

(如果我必须使用其中一种 VirtualBox 解决方法,这很好,但奇怪的是它适用于 virtualenv 1.8.2 而不是 1.8.4 - 请参阅我的要点的结尾。)

我遇到了同样的问题。 使用 https://www.virtualbox.org/ticket/10085 中建议的 VBoxManage setextradata 对我有用。 但这是另一个让运行虚拟本地开发服务器的过程变得不必要的麻烦的小事:)

如此评论中所建议的,通过在我的 Vagranfile 中使用“v-root”作为我的“SHARE_NAME”,我也能够让 VBoxManage setextradata 为我工作(使用 virtualenv 1.8.4)。 感谢大家的信息/建议!

我修复它的步骤:

  1. 使用 virtualenv==1.8.2(不适用于 1.8.4!)
  2. 主机操作系统中的 setextradata:
VBoxManage setextradata CENTOS VBoxInternal2/SharedFoldersEnableSymlinksCreate/home/oe 1

, 其中 CENTOS - Virtualbox 操作系统名称,/home/oe - 挂载文件夹的名称

  1. 在具有读写权限的客户操作系统中挂载设备:
sudo mount -t vboxsf -o rw,uid=1000 shared_folder /mnt/shared_folder

,其中 uid=1000 - 来宾操作系统中当前用户的 uid(请参阅 /etc/passwd)。

将 virtualenv 升级到最新版本(1.11.6),并将其用作

virtualenv --always-copy testenv

选项不会使用硬链接,而是复制文件

我在 vm 主机的共享目录上收到此错误。 当我切换到未共享的目录时,一切正常。

@socrateslee谢谢伙计。 你帮我省了很多麻烦!

原因是您尝试在共享文件夹中启动 virtualenv

OSError: [Errno 30] 只读文件系统
如果您在 vm 中使用共享驱动器并尝试在该目录中执行 tox,则会引发此错误。 简单的解决方案是将源代码复制到 vm 的某个目录中,比如说在您的主目录 /home/sunil/projectName/ 中。 并在此目录中执行 tox 命令。

Tox 现在有一种方法可以在 virtualenv 中设置不使用符号链接

`[测试环境]

总是复制=真`

我没有使用 Virtual Box,我正面临这个问题。 我不知道为什么在特定文件夹中它不起作用。 我做了 chmod 和 chown 但它不起作用。

ERROR: Could not install packages due to an EnvironmentError.
Traceback (most recent call last):
  File "/usr/local/lib/python3.7/site-packages/virtualenv_support/pip-19.1.1-py2.py3-none-any.whl/pip/_internal/commands/install.py", line 414, in run
    use_user_site=options.use_user_site,
  File "/usr/local/lib/python3.7/site-packages/virtualenv_support/pip-19.1.1-py2.py3-none-any.whl/pip/_internal/req/__init__.py", line 58, in install_given_reqs
    **kwargs
  File "/usr/local/lib/python3.7/site-packages/virtualenv_support/pip-19.1.1-py2.py3-none-any.whl/pip/_internal/req/req_install.py", line 920, in install
    use_user_site=use_user_site, pycompile=pycompile,
  File "/usr/local/lib/python3.7/site-packages/virtualenv_support/pip-19.1.1-py2.py3-none-any.whl/pip/_internal/req/req_install.py", line 448, in move_wheel_files
    warn_script_location=warn_script_location,
  File "/usr/local/lib/python3.7/site-packages/virtualenv_support/pip-19.1.1-py2.py3-none-any.whl/pip/_internal/wheel.py", line 426, in move_wheel_files
    clobber(source, lib_dir, True)
  File "/usr/local/lib/python3.7/site-packages/virtualenv_support/pip-19.1.1-py2.py3-none-any.whl/pip/_internal/wheel.py", line 357, in clobber
    ensure_dir(dest)  # common for the 'include' path
  File "/usr/local/lib/python3.7/site-packages/virtualenv_support/pip-19.1.1-py2.py3-none-any.whl/pip/_internal/utils/misc.py", line 99, in ensure_dir
    os.makedirs(path)
  File "/Users/aw3/Projects/python/platzi-python/appengine_contact_server/venv/bin/../lib/python3.7/os.py", line 211, in makedirs
    makedirs(head, exist_ok=exist_ok)
  File "/Users/aw3/Projects/python/platzi-python/appengine_contact_server/venv/bin/../lib/python3.7/os.py", line 211, in makedirs
    makedirs(head, exist_ok=exist_ok)
  File "/Users/aw3/Projects/python/platzi-python/appengine_contact_server/venv/bin/../lib/python3.7/os.py", line 221, in makedirs
    mkdir(name, mode)
OSError: [Errno 30] Read-only file system: '/lib'
Cleaning up...
Removed build tracker '/private/var/folders/31/j0bhpp4s3qx1kcpz6fnq__b40000gn/T/pip-req-tracker-ry41njg8'
----------------------------------------
...Installing setuptools, pip, wheel...done.
Traceback (most recent call last):
  File "/usr/local/bin/virtualenv", line 10, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.7/site-packages/virtualenv.py", line 870, in main
    symlink=options.symlink,
  File "/usr/local/lib/python3.7/site-packages/virtualenv.py", line 1173, in create_environment
    install_wheel(to_install, py_executable, search_dirs, download=download)
  File "/usr/local/lib/python3.7/site-packages/virtualenv.py", line 1019, in install_wheel
    _install_wheel_with_search_dir(download, project_names, py_executable, search_dirs)
  File "/usr/local/lib/python3.7/site-packages/virtualenv.py", line 1110, in _install_wheel_with_search_dir
    call_subprocess(cmd, show_stdout=False, extra_env=env, stdin=script)
  File "/usr/local/lib/python3.7/site-packages/virtualenv.py", line 963, in call_subprocess
    raise OSError("Command {} failed with error code {}".format(cmd_desc, proc.returncode))
OSError: Command /Users/aw3/Projects/...r/venv/bin/python3.7 - setuptools pip wheel failed with error code 1

就我而言,是setup.cfg和空的prefix=导致了这种混乱。

此页面是否有帮助?
0 / 5 - 0 等级