OSError:[Errno 13]ディレクトリでのアクセスが拒否されました。


123

pip install -r requirements.txt以下の例外で失敗しますOSError: [Errno 13] Permission denied: '/usr/local/lib/...。何が問題で、どうすれば修正できますか?(私はDjangoをセットアップしようとしています)

Installing collected packages: amqp, anyjson, arrow, beautifulsoup4, billiard, boto, braintree, celery, cffi, cryptography, Django, django-bower, django-braces, django-celery, django-crispy-forms, django-debug-toolbar, django-disqus, django-embed-video, django-filter, django-merchant, django-pagination, django-payments, django-storages, django-vote, django-wysiwyg-redactor, easy-thumbnails, enum34, gnureadline, idna, ipaddress, ipython, kombu, mock, names, ndg-httpsclient, Pillow, pyasn1, pycparser, pycrypto, PyJWT, pyOpenSSL, python-dateutil, pytz, requests, six, sqlparse, stripe, suds-jurko
Cleaning up...
Exception:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 283, in run
    requirement_set.install(install_options, global_options, root=options.root_path)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1436, in install
    requirement.install(install_options, global_options, *args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 672, in install
    self.move_wheel_files(self.source_dir, root=root)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 902, in move_wheel_files
    pycompile=self.pycompile,
  File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 206, in move_wheel_files
    clobber(source, lib_dir, True)
  File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 193, in clobber
    os.makedirs(destsubdir)
  File "/usr/lib/python2.7/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/amqp-1.4.6.dist-info'

関連(MacOSの/自作特定)stackoverflow.com/questions/33004708/...
WIM

回答:


76

オプションa)virtualenvを作成し、アクティブ化してインストールします。

virtualenv .venv
source .venv/bin/activate
pip install -r requirements.txt

オプションb)homedirにインストールします。

pip install --user -r requirements.txt

私の推奨では、このプロジェクトの要件が他のプロジェクトの要件に干渉しないように、安全な(a)オプションを使用しています。


2
sudo:pip: command not foundこのコマンドを実行すると、aws ec2インスタンスでこのようなエラーが発生しました。助けてください。
user3768495 2016年

2
@ user3768495デフォルトでは、pipはインストールされていません。EC2はどのディストリビューションですか?また、python2がインストールされていない可能性があるため、python2をインストールするか、pip3を使用します。ただし、これには注意してください。
hectorcanto 2017年

33
これは複数の場所で推奨されていないので読んだことがあります。ピップを実行するときは、sudoの使用に注意する必要があるようです(バートの回答を参照)
Justus Eapen

3
@JustusEapen:私はそれについてどう思うかわからない。OPの質問に対する正しい答えは、「スーパーユーザーのアクセス許可で怪しげなコードを実行しない」や「定期的に歯を磨く」など、基本的なコンピューターの衛生に関するマニュアルではないと思います。最適な答えは、パッケージをユーザー単位またはシステム全体でインストールできることと、OPが望むようにシステム全体にインストールするには(完全に非常に多くの理由があるため)、スーパーユーザーの権限が必要であることを指摘する必要があります。システムパスにパッケージをインストールしないように注意することは、他のSOの質問ではおそらく他の仕事です。
トビアテサン2017

8
sudoアドバイスにより反対投票。現在は機能していますが、将来的に多くの頭痛の種になるでしょう。
ジェラルド

318

sudowith の使用についてのアドバイスは本当に止めるべきpip installです。最初に試すことをお勧めしpip install --userます。これが失敗した場合は、ここの上部の投稿をご覧ください

使用すべきでない理由sudoは次のとおりです。

を使用してpipを実行するとsudo、インターネットから任意のPythonコードをrootユーザーとして実行することになります。これは非常に大きなセキュリティリスクです。誰かがPyPIに悪意のあるプロジェクトを作成し、それをインストールした場合、あなたのマシンへのrootアクセスを攻撃者に与えます。


5
良い観察。それは結局のところ、すべてのために、すべてのsudo x installためにx(を含むx = make
トビアテサン2017

1
これも私の問題を解決しました。--userを追加するとどうなりますか?
Miles Johnson

1
@MilesJohnson追加--userすると、ルートではなくホームディレクトリにパッケージがインストールされます。この場所に何かをインストールする場合、追加の特権は必要ありません。
バート

1
さらに、プロキシの背後にあるリモートサーバーを使用している場合、「sudo」を使用すると、リモートサーバーのネットワークのインターネットリポジトリやgitリポジトリからパッケージを取得できなくなります。
運動失調症2017年

2
に関するすべての言及はsudo1年前に削除されました。この回答は廃止されています。修正して更新してください。また、ユーザーごとのインストールとシステム全体のインストール、および権限についても言及する必要があります。すぐに陳腐化する傾向がある他の回答を直接批判するためにあなたの回答を使用しないでください。
smci

28

システム全体のパスにパッケージをインストールしようとしましたが、許可がありません。

  1. 一般に、システム全体のパスにパッケージをインストールするには、を使用して、自分の責任sudo一時的にスーパーユーザー 権限取得できます

     sudo pip install -r requirements.txt

    詳細については、sudo こちらをご覧ください

    実際、これは悪い考えであり、良いユースケースはありません。@ wimのコメントを参照してください。

  2. システム全体の変更を行いたくない場合は、フラグを使用してユーザーごとのパスにパッケージをインストールできます--user

    それが取るすべては:

     pip install --user runloop requirements.txt
  3. 最後に、さらに細かい制御を行うために、特に複数のプロジェクトで作業していて、それぞれの依存関係を追跡したい場合は、virtualenvを使用して、開発環境の優れたソリューションとすることもできます。

    でvirtualenvをアクティブ化した後

    $ my-virtualenv/bin/activate

    次のコマンドは、パッケージをvirtualenv内に(システム全体のパス上ではなく)インストールします。

    pip install -r requirements.txt


4
rootでのpipの実行にはセキュリティリスク
Nrzonline 2017

rootとしてインターネットからコードを実行するものを実行すると、セキュリティ上のリスクが伴います。
トビアテサン

これはほぼ最良の回答ですが、更新する必要があります。a)これでpyenv/pipenvvirtualenv(またはconda-env)よりも優先してそれらに言及する必要があります。b)sudoは有害と見なされ、その他の理由が表示されます。したがって、大きな免責事項を付けて、envベースの回答を最初に置き、sudoを最後に置きます。
smci

1
sudo pip install -r requirements.txt決して正しくない。システムのpython環境は、システムperiodに属しています。あなたがシステムによりPythonのものをインストールする場合、のみ(例えばパッケージマネージャでそれを行うsudo yum installapt-getそれらのレポは無駄図書館の安全と互換性のあるバージョンを持っている必要があるため、等...)。
wim

1
@TobiaTesan古いsudo make install、通常コンパイルされた+リンクされたコードは、sudo pip installシステムにインストールするとPython envが依存関係を無効にする可能性がため。python-frobnicator依存関係のあるシステムサービスfroblib(これもパッケージマネージャーにあり、互換性のあるバージョンに固定されます)があり、次にsudo pip install" froblib > 1.2"に依存する他のアプリまたはライブラリがあるとします。Pipはのシステムバージョンをfroblib新しいバージョンに喜んで「アップグレード」します。これは、互換性のない/テストされていない可能性があり、システムを破壊します。
2019年

26

Linux(ubuntuベース)で許可拒否エラーにかなり苦労した後、何がうまくいったかを明確にし、上記のBertの答えを利用して、私は今...

$ pip install --user <package-name>

または要件ファイルでpipを実行している場合...

$ pip install --user -r requirements.txt

これらは、仮想環境の作成を含むすべてのpipインストールで確実に機能します。

しかし、クリーンなソリューション私の更なる経験では、インストールすることであったpython-virtualenvvirtualenvwrapperしてsudo apt-get installシステムレベルで。

次に、仮想環境内でpip install--userフラグなしで、およびなしで使用しますsudo。全体的にはるかにクリーンで、安全で、簡単です。


「「--user」インストールを実行できません。ユーザーサイトパッケージはこのvirtualenvに表示されません。」使用しようとしたときのエラーpip install --user -r requirements.txt
アミールA.シャバニ

@ AmirA.Shabani質問以降、回答が編集されました。現在、「仮想環境の内部では、-userフラグなしでsudoなしでpip installを使用する」と記載されています
Daishi

7

一部のPythonインストールパスに対する書き込み権限がありません。次の方法で許可を与えることができます。

sudo chown -R $USER /absolute/path/to/directory

だからあなたは許可を与えるべきです、そしてそれをもう一度インストールすることを試みてください、もしあなたが新しいパスを持っているなら、あなたも許可を与えるべきです:

sudo chown -R $USER /usr/local/lib/python2.7/

2
brewがインストールされたpythonの場合、brewはパッケージをローカルユーザー(rootなし)として維持するため、これが正しい答えです。
idbrii 2017

9
/ usr / localディレクトリを変更するのは良い考えではありません。ユーザーに属していません。UNIXファイル構造について読む必要があります。
user8162 2018

6
スタッフの下では、/usr一般的に、これらの日、ルートによって所有されるだろう。そこに再帰的に依存すると、システムが大いに失敗する可能性があります。避ける
WIM

0

権限が必要な場合、「sudo」で「pip」を使用することはできません。あなたはトリックをすることができるので、 'sudo'を使用してパッケージをインストールすることができます。'sudo python -m ...'をpipコマンドの前に置くだけです。

sudo python -m pip install --user -r package_name

私には問題ないようですが、説明を追加してください。
pythonic833

-1

だから、私はまったく同じ理由でこれと同じ正確なエラーを受け取りました。完全に別個ですが、既知のHomebrew + pipバグが原因で、私はGoogle Cloudのヘルプドキュメントにリストされているこの回避策に従って、ホームディレクトリに.pydistutils.cfgファイルを作成しました。このファイルには、特定のライブラリのインストールにのみ使用することになっている特別な設定があります。パッケージをインストールした後で、disutils.cfgファイルを削除する必要がありましたが、削除するのを忘れていました。だから私のための修正は実際にはただ...

rm ~/.pydistutils.cfg

そして、すべてが正常に機能しました。もちろん、本当の理由でそのファイルに設定がある場合は、そのファイルをそのままrmする必要はありません。しかし、他の誰かがその回避策を実行し、そのファイルを削除するのを忘れた場合に備えて、これは私にとってはトリックでした!


-1

当然の許可問題ですが、

sudo chown -R $USER /path to your python installed directory

デフォルトでは /usr/local/lib/python2.7/

または試す、

pip install --user -r package_name

そして、pip install -r requirements.txtこれはあなたの環境内にインストールされます

言うまでもありませんが、sudo pip install -r requirements.txtこれは任意のpythonパスにインストールされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.