Странные проблемы с разрешениями для исполняемого файла virtualenv python (lubuntu-12.10)

Вкратце, моя проблема в том, что когда я пытаюсь создать virtualenv, используя mkvirtualenv из virtualenvwrapper, я получаю следующую ошибку:

$ 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

Я запускаю Lubuntu 12.10 на моем macbook вместе с Mountain Lion и создал раздел для использования в качестве общего домашнего каталога между двумя установками, примерно следуя инструкциям здесь (http://mikeclaffey.com/dual-boot-osx-ubuntu/). Насколько я могу судить, все это работает правильно, как в ubuntu, так и в горном льве, но я упоминаю об этом только потому, что это означает, что моя установка lubuntu не является строго стандартной.

Я установил python-setuptools и python-dev с помощью apt-get, затем использовал 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), но получает те же ошибки разрешения.

Любая помощь будет очень оценена!

Ответ 1

Оказывается, проблема заключалась в том, как я установил свой общий раздел. Я установил (в/etc/fstab):

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

Однако параметр "пользователь" автоматически включает "noexec" --- таким образом, после того, как virtualenv скопировал двоичный код системы на мой домашний раздел, он не смог выполнить работу из-за флага "noexec".

Изменение fstab для чтения:

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

решил проблему.

Ответ 2

У меня была та же проблема. Я попытался создать virtualenv в своей домашней папке, и это сработало нормально, но я получил эту ошибку, когда попытался создать ее на другом разделе.

Итак, чтобы исправить вашу проблему, попробуйте другое место или посмотрите, как материал монтируется.

Ответ 3

Как уже говорили другие ответы (к счастью), это вопрос с разрешениями. Я разрешил его, повторно установив требуемый диск с правильными разрешениями exec (как уже указывалось). Но я не мог использовать @duncanm anwer, так как не смог найти свой путь к файлу в файле /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, посмотрев вкладку свойств в диспетчере файлов.

Ответ 4

Я считаю, что это прежде всего проблема с разрешениями на выполнение, как вы обнаружили. Вы также можете обойти это, создав virtualenv в подкаталоге /data или/sd-ext. Я работаю над многопользовательской поддержкой, которая ставит домашние каталоги под /data/home, а не только с одной домашней директории sd.