虚拟环境Python可执行文件的奇怪权限问题(Lubuntu-12.10)

13
简而言之,我的问题是当我尝试使用virtualenvwrapper中的mkvirtualenv创建虚拟环境时,会出现以下错误:
$ mkvirtualenv test
New python executable in test/bin/python
ERROR: The executable test/bin/python could not be run: [Errno 13] Permission denied
然而,当我查看二进制文件的权限时,据我所知,一切应该没问题...
$ ll ~/.virtualenvs/test/bin
total 2604
drwxr-xr-x 1 (username) staff       5 Feb  7 19:10 ./
drwxr-xr-x 1 (username) staff       5 Feb  7 18:51 ../
-rwxr-xr-x 1 (username) staff 2655776 Feb  7 19:10 python*
lrwxrwxrwx 1 (username) staff       6 Feb  7 19:10 python2 -> python*
lrwxrwxrwx 1 (username) staff       6 Feb  7 19:10 python2.7 -> python*

当我尝试以root身份运行时,我会遇到类似的错误:

$ sudo .virtualenvs/test/bin/python
sudo: unable to execute .virtualenvs/test/bin/python: Permission denied
我在我的MacBook上运行Lubuntu 12.10,同时安装了Mountain Lion,并设置了一个分区作为两个操作系统共享的家目录,大致按照这里的说明进行操作(http://mikeclaffey.com/dual-boot-osx-ubuntu/)。据我所知,这一切都正常工作,在Ubuntu和Mountain Lion中都是如此,但我提到这一点只是因为它意味着我的Lubuntu安装不是严格标准的。 我使用apt-get安装了python-setuptools和python-dev,然后使用sudo easy_install pip获取pip-1.2.1,接着使用sudo pip install virtualenv virtualenvwrapper获取virtualenv-1.8.4和virtualenvwrapper-3.6。 进一步的细节:我已在我的主目录中创建了.virtualenvs目录,并添加了以下内容:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
export PIP_VIRTUALENV_BASE=$WORKON_HOME

添加到我的.bashrc

另外,我尝试使用sudo apt-get install python-pip代替easy_install(这将安装pip-1.1,而不是pip-1.2.1),但是出现了相同的权限错误。

非常感谢任何帮助!


在进一步尝试后,我发现SD卡被挂载为NOEXEC。在去除NOEXEC标志重新挂载后,我现在可以在虚拟环境创建中取得一些进展了。 - brousch
如果您将其作为答案添加,那将非常好。 - Bleeding Fingers
4个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
27

结果问题出在我挂载共享分区的方式上。我是使用以下方式挂载的(在/etc/fstab中):

UUID=....  /home   hfsplus   auto,user,nodev,rw    0    0

然而,'user'选项自动包含'noexec' --- 因此,在virtualenv将系统Python二进制文件复制到我的home分区后,由于'noexec'标志,无法运行。

将我的fstab更改为以下内容:

UUID=....  /home   hfsplus    auto,user,exec,nodev,rw   0   0

问题已解决。


2
作为其他答案(值得感激)已经指出,这是一个权限问题。我通过使用正确的exec权限重新挂载所需的驱动器来解决它(正如已经指出的那样)。但是我不能使用@duncanm的答案,因为我在/etc/fstab文件中找不到我的驱动器路径。 我在我的Ubuntu 14.04上执行了以下操作,并且它能够完成任务。 要卸载 -
$ sudo umount /media/ashish/Work/
为了以正确的权限重新挂载,请执行以下操作 -
$ sudo mkdir /media/ashish/Work
$ sudo mount -o exec /dev/sda6 /media/ashish/Work/
$ cd /media/ashish/Work/
我通过查看文件管理器中的属性选项卡找出了 /dev/sda6 部分。

2

我曾经遇到过同样的问题。我在我的主文件夹中创建了一个虚拟环境,这个方法很好用,但是当我试图在另一个分区中创建时,我遇到了这个错误。

解决这个问题的方法是尝试使用其他位置或检查挂载方式。


0

我认为这主要是执行权限的问题,正如你已经发现的那样。你也可以通过在/data或/sd-ext的子目录中创建virtualenv来解决这个问题。我正在开发多用户支持,将home目录放在/data/home下,而不仅仅是一个sd卡的“home目录”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,