Подтвердить что ты не робот

Ошибка python setup.py sdist: операция не разрешена

Я пытаюсь создать исходный пакет 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 11.04; VirtualBox 4.14; osx 10.6.6; python 2.7.1;

4b9b3361

Ответ 1

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

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

Ответ 2

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

Благодаря Фабиану Кохему он нашел быстрое и грязное решение: post

# 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

Ответ 3

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

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

Ответ 4

Похоже, это было исправлено в версии 2.4.9 Python - 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

Ответ 5

Так я достиг рабочего 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]

Ответ 6

Ни один из вышеперечисленных ответов не решил мою проблему. Тем не менее, я выполнял следующую команду в общей папке с бродягой в 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 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" командой copy cp "$pyc" "$pyo" в приведенной выше оболочке script.