LoginSignup
8
9

More than 5 years have passed since last update.

linuxbrewでエックスサーバーにPythonを導入した話

Posted at

目的はエックスサーバーへのPythonを導入だ。しかし、Pyenvでインストールしようとしても管理者権限がなく断念。代わりにlinuxbrewからPythonをインストールした。

Pythonインストールの目的

Wordpressにpythonのスクレイピングスクリプトが仕込めないか確認したい。「外部からSSH接続してMySQLに接続する」パターンも検討したが、外部接続する理由に乏しくNG(むしろ負担が重い)。極力、エックスサーバー内で完結したい。

前提

方針

エックスサーバーでPythonスクリプトが動くかテスト

エックスサーバーでPythonのスクリプトが動くかどうか確かめたい。ただ、ローカル環境で導入していたPython3.6.2をサーバー上でinstallしようとするとエラーが発生。ネットの各記事を参照しlinuxbrewやgitをinstallしたが、エラーの内容は変わらない。具体的には、OpenSSL libはどこだ?と聞かれる訳だが、/etcの認証が弾かれることが原因だと思われる。多分。管理者権限がないことが原因の模様。

エックスサーバーではPyenvでPythonがインストールできない問題

ネット上の各記事を参照しPyenvを使ってエックスサーバーにPythonをインストールしようとしたが断念した。この章はその試行錯誤の記録である。

目的は、エックスサーバーでPythonスクリプトが動くかどうかのテストだ。エックスサーバーへの接続方法は以下の記事を参照してほしい。
http://vdeep.net/xserver-ssh
https://qiita.com/ShimantoAkira/items/37d09aca38d9e46ddd9a

準備ができたら、以下をシェルスクリプトで入力しエックスサーバーにSSH接続。

ssh xsrv

まずはgitを入れる必要がある模様。ただし、gitは依存ライブラリが無いとインストールできないので、まずは依存ライブラリをインストールする必要がある。以下のページを参考に、「gettext」と「curl」を導入(疲れた…)。
http://vdeep.net/xserver-git

しかし、gitをインストールしようとすると、

The Python ssl extension was not compiled. Missing the OpenSSL lib?

と怒られる。色々やったけど無理だったので、Linuxbrewをインストールしてやり直すことにした。こちらの方が何かとインストールしやすい。で、同じところまで行ったんだけど、同じエラーが出てしまう。githubのページに解決策が記載してあるので試す(もちろんPythonのバージョン名は適宜変更)。
https://github.com/pyenv/pyenv/wiki/Common-build-problems

CFLAGS="-I$(brew --prefix openssl)/include" \
LDFLAGS="-L$(brew --prefix openssl)/lib" \
pyenv install -v 3.4.3

しかし、やはり同じエラーが出てくる。むしろパーミッションが拒否されていることが原因?

Last 10 log lines:
File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 646, in _load_unlocked
File "<frozen importlib._bootstrap>", line 616, in _load_backward_compatible
File "/tmp/tmpfgpubifu/pip-9.0.1-py2.py3-none-any.whl/pip/_vendor/distro.py", line 1050, in <module>
_distro = LinuxDistribution()
File "/tmp/tmpfgpubifu/pip-9.0.1-py2.py3-none-any.whl/pip/_vendor/distro.py", line 595, in __init__
self._distro_release_info = self._get_distro_release_info()
File "/tmp/tmpfgpubifu/pip-9.0.1-py2.py3-none-any.whl/pip/_vendor/distro.py", line 984, in _get_distro_release_info
basenames = os.listdir(_UNIXCONFDIR)
PermissionError: [Errno 13] Permission denied: '/etc'

以下のページを見ると、
"/etcへのアクセス権がなく、pipを使うとpipの中のos.listdir(_UNIXCONFDIR)で失敗します"
と記載があるので、そもそもPythonインストールの時点で100%つまずくんじゃね?って感じがする(しかし記事の掲載を見るとpyenvで問題なくPythonがインストールできているようだ…)。
https://qiita.com/ShimantoAkira/items/37d09aca38d9e46ddd9a

こっちのページで行けそう?(ダメだった)
https://github.com/pyenv/pyenv/issues/993

やっぱ/etcへのアクセス権がないことが原因っぽい。あれ、違う原因かと思ってたけどdistro.pyを修正するのは同じなので試してみる。
http://blog.saboh.net/anaconda_pip_install_error/

てかそもそもPythonがインストールされてないから修正できないのか(distro.pyというファイルがないから)。詰んだ…周囲はどうやってエックスサーバーにPythonをインストールしてるんだ?というかそもそもPythonのインストールにはgitが必要なのに、gitをインストールしていなかった。そのため、

brew install git

でgitをインストール。

ここで断念。

linuxbrewでPythonをインストール

代わりにlinuxbrewからPythonをインストールしたところ、無事インストールできた。

brew install python3

で、すかさずPython3を使用してアップロードしたスクレイピング用ファイルを作動させるために、pip installで必要なライブラリをインストールする(具体的にはBeautifulSoup、requests、htmlをインストール)。

pip install <ライブラリ名>

が、モジュールがないと怒られる。

ModuleNotFoundError: No module named 'requests'

ああpip3だったかと思いpip3でinstall

pip3 install <ライブラリ名>

これで解決。

8
9
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9