virtualenvでpipを使用するときに「アクセスが拒否されました」を回避する方法


93

pipUbuntuマシンの仮想環境でPythonパッケージをデプロイしようとしましたが、権限関連の問題が発生しました。例えば:

(TestVirtualEnv)test@testServer:~$ pip install markdown2

終了する:

エラー:「/home/test/virtualenvs/TestVirtualEnv/lib/python3.3/site-packages/markdown2.py」を作成できませんでした:権限が拒否されました

sudoパッケージをグローバルにインストールし、仮想環境内にはインストールしないため、できません。私はchownエドsite-packages; ls番組に関連したディレクトリのみeasy_installpipおよびsetuptools、および値下げに関連する何も。

pip権限関連のエラーが発生することなく、仮想環境にパッケージをデプロイする方法は?


明確にするために:あなたはこのvirtualenvを作成しましたsudoか?
sebastian_oe 2013年

@sebastian_oe:私そう思った。念のために再作成します。
Arseni Mourzenko 2013年

4
次に、これが問題になる可能性があります。なしでvirtualenvを作成してみてくださいsudo
sebastian_oe 2013年

1
@sebastian_oe:なしの仮想環境を作成しましたsudo。実際、パッケージは正しくインストールされます。私のコメントを受け入れられるように、コメントを回答に昇格できますか?
Arseni Mourzenko 2013年

1
また、別のユーザー間で切り替える場合は、virtualenvディレクトリを所有している(または書き込みアクセス権がある)ユーザーを使用していることを確認してください。virtualenv他のユーザーと一緒にアクティブ化できますが、パッケージをインストールできず、アクセス許可が付与されます。
Andrius

回答:


106

virtualenvパーミッションの問題は、あなたが作成したときに発生する可能性があるvirtualenvとしてsudo、その後なしで動作sudoの中でvirtualenv

あなたの質問のコメントで分かったように、ここで解決策をすることで作成virtualenvせずsudoにできるようにする作業(特に書き込み)その中になしsudo


4
sudoが必要な/ optに作成する場合、virtualenvはsudoなしではインストールできないと思います。
Umair A.

7
@sebastian_oe愛してると思います
Nobbynob Littlun

5
virtualenvsudoなしでを作成する方法は?
Tune

を使用してvirtualenvを作成した場合、再作成sudoせずに簡単に修正する方法については@vingtoftの回答を参照してください
David A

103

解決:

rootとしてvirtualenvを作成した場合は、次のコマンドを実行します。

sudo chown -R your_username:your_username path/to/virtuaelenv/

これでおそらく問題が解決します。

乾杯


1
これは私にとってはうまくいきました(chown /usr/local/lib/python3.4)。ただし、virtualenvをrootとして作成したとは思いませんが、実際にはPython3.4をrootとしてインストールしていました。私はまだテスト中ですが、このソリューションでさらに問題が発生すると思いますか、それともこのchownがほとんどのエラーを修正しますか?
ntk4

3
rootとしてvirtualenvまたはpythonを作成したかどうかはどのようにしてわかりますか?
A__ 2018年

6

私の場合、私はを使用mkvirtualenvしていましたが、python3を使用するつもりであるとは言いませんでした。私はこのエラーを受け取りました:

mkvirtualenv hug
pip3 install hug -U

....
error: could not create '/usr/lib/python3.4/site-packages': Permission denied

python3を指定した後に動作しました:

mkvirtualenv --python=/usr/bin/python3 hug
pip3 install hug -U

5

sudoを使用してvirtualenvを作成していません。したがって、セバスチャンの答えは私には当てはまりませんでした。私のプロジェクトはと呼ばれていutilsます。私はutilsディレクトリをチェックしてこれを見ました:

-rw-r--r--   1 macuser  staff   983  6 Jan 15:17 README.md
drwxr-xr-x   6 root     staff   204  6 Jan 14:36 utils.egg-info
-rw-r--r--   1 macuser  staff    31  6 Jan 15:09 requirements.txt

ご覧のとおり、utils.egg-inforootnot によって所有されていmacuserます。そのため、permission deniedエラーが発生しました。それも/Users/macuser/.virtualenvs/armoury/lib/python2.7/site-packages/utils.egg-link作成さrootれたため、削除する必要もありました。pip install -e .それらを削除した後、私は再びやった、そしてそれはうまくいった。


3

ルートを使用して仮想環境を作成した場合は、次のコマンドを使用します

sudo su

それはあなたにルートアクセスを与え、そしてこれを使用して仮想環境をアクティブにします

source /root/.env/ENV_NAME/bin/activate

1

あなたは、仮想環境を活性化しなかった PIPを使用する前に。

試してみてください:

$(your venv path) . bin/activate

次に、メインフォルダーでpip -r requirements.txtを使用します。


1

また、既存の仮想環境内で新しいvenvを作成した後、(偶然に)これが発生しました。これを診断する簡単な方法は、pythonがシンボリックリンクされている場所を確認することです。つまり、次を実行します。

ls -l venv/bin/python

そして、それが適切なPythonバイナリを指していることを確認してください。ほとんどのシステムでは、これは/usr/bin/pythonまたはになり/usr/bin/python3ます。一方、既存の仮想環境を指す場合は、のようになります/home/youruser/somedir/bin/python。それが後者の場合、既存のvirtualenvの「内部」にいないことを確認しながら、envを再作成することをお勧めします(つまり、run deactivate


ここに投稿されているのは、適切なキーワードについて言及する人気のある質問であるため、他の人に見つけられて役立つ可能性が高いためです
Sam Mason

0

virtualenvの作成中にsudoを使用すると、ディレクトリはroot権限で作成されます。したがって、sudo以外のユーザーでパッケージをインストールしようとすると、そこにインストールする権限がありません。したがって、常にsudoなしでvirtualenvを作成し、sudoなしでインストールしてください。

グローバルpythonにインストールされているパッケージをvirtualenvにコピーすることもできます。

cp -r /lib/python/site-packages/* virtualenv/lib/python/site-packages/

これは問題ではありませんでした。コメントを読んだ場合、OPは最初にsudoを使用して仮想環境を作成していました。
NickD 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.