ルート権限がないサーバーでpipを使う方法

Pythonは3.6
pyenv, virtualenvでの仮想環境です。

OSはCentOS7。レンタルサーバーです。

レンタルサーバーはルート権限くれないと思うので、その時の対処法。

レンサバで任意のPythonが使えるようになってる前提です。

pipコマンドを実行するとエラーがでる

File "/home/usename/.pyenv/versions/miniconda3-3.19.0/envs/miniconda36-venv/lib/python3.6/site-packages/pip/_vendor/distro.py", line 984, in _get_distro_release_info
    basenames = os.listdir(_UNIXCONFDIR)
PermissionError: [Errno 13] 許可がありません: '/etc'

上記の通り、HOMEディレクトリ以下のpyenv, pyenv-virtualenvで仮想環境を構築しています。
easy_installは通るけどpippip freezeでもエラー吐きます。

対応策

/python3.6/site-packages/pip/_vendor/distro.pybasenames = os.listdir(_UNIXCONFDIR)でエラーが出ているので、
distro.pyを書き換えます。
distro.pyの場所は各自の環境で変わるので探してください。

basenames = os.listdir("/home/username/local/etc") # ←os.listdir()に渡すデータを_UNIXCONFDIRから適当なディレクトリに変更

/home/username/local/etcは事前に作っておきました。中身は空です。

これでpipが使えます。

この変更による悪影響はわかりませんので、自己責任でおねがいします。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.