2011-10-10 21 views
17

pythonソースパッケージを作成しようとしていますが、ファイルのハードリンクを作成すると失敗します。python setup.py sdistエラー:操作が許可されていません

$ 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 

私は、問題がどこから来るおそらくUbuntuの仮想インスタンスを実行するVBOXを使用しています。ソースディストリビューションを作成する際にハードリンクを使用する方法はありますか?

システム情報:

Ubuntuのサーバ11.04; VirtualBox 4.14; osx 10.6.6; python 2.7.1;

+0

あなたはどのOS/pythonバージョンを使用していますか? –

+0

私はUbuntuサーバー11.04を実行しています。 Python 2.7.1 – rlayte

+0

Macで同じことが起こりましたが、samba共有フォルダからアクセスするpythonプロジェクトを構築しようとしました。 –

答えて

9

あなたの質問から、どのステップが失敗しているのか不明です。エラーの直前のハードリンクかもしれません。 straceを試して、どのシステムコールが失敗しているかを知ることができます。それは少なくとも問題のよりよいイメージを与えるはずです。

This python bug report distutils2まではこれを修正しないようです。誰かがあなたに役立つかもしれないパッチを提供しました。また、NFS経由でディレクトリをマウントしてビルドすることもできます。私はNFSがハードリンクを可能にすると信じています。

+0

最後の呼び出しの出力を投稿に追加しました。 – rlayte

+0

あなたはこれをどのような種類のファイルシステムで実行していますか?ハードリンクをサポートしていない可能性があります。 –

+1

そうだね。 'ln foo bar'を実行すると、同じエラーが発生します。これには道がありますか?私はosxホスト上でvboxを通してubuntuを実行しているので、仮想ドライブ上にハードリンクを作成できないことがあると想定しています。 – rlayte

16

同じ問題が発生しました。 私は、pythonソースを仮想ボックスの共有フォルダから私のdebianホームフォルダに移動することで動作させることができました。もうsdistにエラーはありません。

私はそれが役に立ちそうです。

+3

これは私のために働いた - いくつかのマウントされたボリュームでハードリンクを作成することはできません、と思います。 –

+2

これはこの問題によるものです:https://www.virtualbox.org/ticket/10085 –

17

同じ問題。私は迷惑メールを使用しています、Gust OSはUbuntuですが、私のホストOSはWindowsです。私はvimのファンではないので、@ simoの答えは私がバーチャルボックスの共有フォルダに依存しているため、崇高なエディタによって行われた変更をUbuntuの仮想マシンに同期させるためにはあまり役に立ちません。ファビアンKochemへ

おかげで、彼は迅速かつ汚い回避策を見つけました:これは、Pythonのバージョン2.7.9で修正されていたよう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 
+0

このチェックはルートとして実行すると失敗します。それは残念ながら避けられないものです。 : – ThorSummoner

+1

@ThorSummonerあなたは 'del os.link'を直接使うことができます –

+0

@ThorSummonerあなたはその特定の条件に縛られていませんあなた自身の状況に応じて創造しなければならないかもしれません。例えば' -vagrant 'os.path.abspath(os.path.dirname(__ file __))内の '-vagrant'の場合、同期されたフォルダ名に' '... – Jamey

0

私はPython-2.7.10で作業中のuwsgi(Ubuntu 14.04、デフォルトのPython 2.7.6)に達しました。続ける前に

ステップ

、あなたは--enable-sharedと新しいPythonのをコンパイルする必要があります。

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

コンテキスト:uwsgiとAPT-でインストールuwsgi-のpython-プラグインでのPython 2.7.6とUbuntuの14.04 get 問題:私はコンパイルされたPython-2.7で私のすべてのためのvirtualenvを持っています。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) 

もの準備:iniファイル上で

$ 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" 

[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] 
0

を上記の回答のどれも私の問題を解決していません。

python setup.py bdist_bdrpm 

をし、エラーになってしまった:しかし、私はCentOSに6で浮浪者の共有フォルダで次のコマンドを実行していた

ln: creating hard link `xxx': Operation not permitted error: Bad exit status from /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 

したがって、あなたが上記のシェルスクリプトでコピーコマンドcp "$pyc" "$pyo"でハードリンクln -f "$pyc" "$pyo"を交換することができるはずです。

関連する問題