python setup.py sdist error: операция не разрешена - PullRequest
17 голосов
/ 11 октября 2011

Я пытаюсь создать исходный пакет python, но он не работает при создании жестких ссылок для файлов.

$ python setup.py sdist

running sdist
running check
reading manifest template 'MANIFEST.in'
writing manifest file 'MANIFEST'
making hard links in foo-0.1...
hard linking README.txt -> foo-0.1
error: Operation not permitted

Я попытался запустить команду с sudo, но выдает ту же ошибку.

Это также приводит к той же ошибке:

ln foo bar

Я использую vbox для запуска виртуального экземпляра Ubuntu, из-за которого, вероятно, и возникает проблема.Можно ли использовать жесткие ссылки при создании исходных текстов?

Системная информация:

Ubuntu server 11.04;VirtualBox 4.14;osx 10.6.6;Python 2.7.1;

Ответы [ 6 ]

17 голосов
/ 03 марта 2014

Та же проблема.Я использую vagrant, моей хост-системой является Windows, а Gust OS - Ubuntu.Я не фанат vim, поэтому ответ @ simo мне не сильно помогает, потому что я действительно полагаюсь на виртуальные папки общего доступа, чтобы синхронизировать изменения, сделанные великолепным редактором, с виртуальной машиной Ubuntu.нашел быстрый и грязный обходной путь: сообщение

# if you are not using vagrant, just delete os.link directly,
# The hard link only saves a little disk space, so you should not care
if os.environ.get('USER','') == 'vagrant':
    del os.link
16 голосов
/ 15 января 2012

Я столкнулся с теми же проблемами. Я смог заставить его работать, переместив исходники python из общей папки виртуальной коробки в мою домашнюю папку debian. Больше нет ошибок на sdist.

Надеюсь, это поможет.

9 голосов
/ 11 октября 2011

Из вашего вопроса неясно, какой шаг терпит неудачу.Может быть, жесткие ссылки прямо перед ошибкой.Вы можете попробовать strace, чтобы увидеть, какой системный вызов не работает.Это должно дать лучшую картину проблемы по крайней мере.

Этот отчет об ошибках Python похоже, что они не исправят это до distutils2.Кто-то поставил патч, который может быть полезен для вас.Вы также можете смонтировать каталог через NFS и создать там.Я считаю, что NFS позволяет жесткие ссылки.

8 голосов
/ 05 января 2015

Похоже, это было исправлено в Python версии 2.7.9 - https://hg.python.org/cpython/raw-file/v2.7.9/Misc/NEWS

Issue #8876: distutils now falls back to copying files when hard linking doesn't work. This allows use with special filesystems such as VirtualBox shared folders

0 голосов
/ 27 апреля 2017

Ни один из приведенных выше ответов не решил мою проблему.Тем не менее я выполнил следующую команду в общей папке vagrant на Centos 6:

python setup.py bdist_bdrpm

и в результате вывел сообщение об ошибке:

ln: создание жесткой ссылки `xxx ': Операция не разрешена ошибка: Неверный статус выхода из /var/tmp/rpm-tmp.S9pTDl (% install)

Оказывается, это bash-файл, который в итоге выполняет жесткие ссылки:

cat /usr/lib/rpm/redhat/brp-python-hardlink

#!/bin/sh

# If using normal root, avoid changing anything.
if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then
        exit 0
fi

# Hardlink identical *.pyc and *.pyo, originally from PLD's rpm-build-macros
# Modified to use sha1sum instead of cmp to avoid a diffutils dependency.
find "$RPM_BUILD_ROOT" -type f -name "*.pyc" | while read pyc ; do
       pyo="$(echo $pyc | sed -e 's/.pyc$/.pyo/')"
       if [ -f "$pyo" ] ; then
               csha="$(sha1sum -b $pyc | cut -d' ' -f 1)" && \
               osha="$(sha1sum -b $pyo | cut -d' ' -f 1)" && \
               if [ "$csha" = "$osha" ] ; then
                       ln -f "$pyc" "$pyo"
               fi
       fi
done

Следовательно, вы можете заменить жесткую ссылку ln -f "$pyc" "$pyo" командой копирования cp "$pyc" "$pyo" в приведенном выше сценарии оболочки.

0 голосов
/ 26 ноября 2015

Так я дошел до рабочего uwsgi (Ubuntu 14.04, Python 2.7.6 по умолчанию) с Python-2.7.10.

Шаги

Перед продолжением, вы должны скомпилировать новый Python с --enable-shared:

$ ./configure --enabled-shared
$ sudo make altinstall

Контекст: Ubuntu 14.04 с Python 2.7.6 с uwsgi и uwsgi-python-plugin, установленный с apt-get Проблема: У меня есть virtualenv для моеговсе с скомпилированным Python-2.7.10

# Previously installed Python-2.7.10 as altinstall
$ python2.7
Python 2.7.10 (default, Nov 25 2015, 11:21:38)
$ source ~/env/bin/activate
$ python
Python 2.7.10 (default, Nov 25 2015, 11:21:38)

Подготовка материала:

$ cd /tmp/
$ git clone https://github.com/unbit/uwsgi.git
$ cd uwsgi
$ make PROFILE=nolang
# On /tmp/uwsgi
$ PYTHON=python ./uwsgi --build-plugin "plugins/python python27"

В INI-файле:

[uwsgi]
plugins         = python27

Результаты на:

** Starting uWSGI 1.9.17.1-debian (64bit) on [Thu Nov 26 12:56:42 2015] ***
compiled with version: 4.8.2 on 23 March 2014 17:15:32
os: Linux-3.19.0-33-generic #38~14.04.1-Ubuntu SMP Fri Nov 6 18:17:28 UTC 2015
nodename: maquinote
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 12
current working directory: /etc/uwsgi/apps-enabled
detected binary path: /usr/bin/uwsgi-core
your processes number limit is 257565
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: enabled
uwsgi socket 0 bound to UNIX address /var/run/uwsgi/app/pypi-server/socket fd 3
Python version: 2.7.10 (default, Nov 26 2015, 11:44:40)  [GCC 4.8.4]
...