0

ローカル 経由で独自のパッケージをインストールしました。sudo python setup.py installソースコードには、次の原因となるコードがありますOSError: (13, 'Permission denied', '....')

curr_dir = os.path.dirname(os.path.realpath(__file__))
    if not os.path.exists(os.path.dirname(os.path.join(curr_dir, "dir1/log1.out"))):
        os.makedirs(os.path.dirname(os.path.join(curr_dir, "dir1/log1.out")))

curr_dir は次のとおりです。

/usr/local/lib/python2.7/site-packages/my_app-1.2.3-py2.7.egg/my_app

と:

$ ls -al '/usr/local/lib/python2.7/site-packages/my_app-1.2.3-py2.7.egg/my_app'
total 696
drwxr-xr-x  35 root  admin   1190 Mar 29 12:00 .
drwxr-xr-x   4 root  admin    136 Mar 29 12:00 ..
-rw-r--r--   1 root  admin    108 Mar 29 12:00 __init__.py
-rw-r--r--   1 root  admin    202 Mar 29 12:00 __init__.pyc
-rw-r--r--   1 root  admin  11964 Mar 29 12:00 file1.py
-rw-r--r--   1 root  admin  12953 Mar 29 12:00 file1.pyc
-rw-r--r--   1 root  admin  13424 Mar 29 12:00 file2.py
-rw-r--r--   1 root  admin  15621 Mar 29 12:00 file2.pyc
.....

どうすれば修正できますか?

PS curr_dir, "dir1/log1.outmkdir と touch で手動でファイルを作成しても、実行中に Python コードも同じ例外をスローします。

4

1 に答える 1

3

sudo python setup.py installローカル経由で独自のパッケージをインストールしました。

一度使用するsudoと (これはすべきではありません)、パッケージに含まれるすべてのファイルは root によって所有されますsetup.py install

現在、パッケージに含まれているモジュールを通常のユーザーとして実行しようとすると、そのモジュールがパッケージ自体の一部であるディレクトリまたはファイルを開く/変更する/読み取る/作成しようとすると、アクセス許可の問題が発生します。 . パッケージのすべてのファイルは root が所有しており、通常のユーザーで実行しようとしていますが、そのユーザーはパッケージのソース パス (ここで参照されているos.path.dirname(os.path.realpath(__file__)).

問題の解決策は、最初にモジュールをアンインストールすることです (ルートとしてツリー全体を削除するだけです)。

次に、通常のユーザーとして、仮想環境を作成し、パッケージをインストールします。これにより、次のことが確認されます。

  1. パッケージがグローバル Python パッケージ リポジトリにインストールされていません。
  2. パッケージのファイルは、通常のユーザー アカウントによって所有されます。
  3. ファイルレベルの操作は、昇格されたアクセス許可 (sudo など) を使用しなくても適切に実行できます。

パッケージのセットアップ手順の一部としてこれらのディレクトリを作成する必要がある場合は、setup.py.

于 2015-03-29T05:38:42.480 に答える