目的はエックスサーバーへのPythonを導入だ。しかし、Pyenvでインストールしようとしても管理者権限がなく断念。代わりにlinuxbrewからPythonをインストールした。
Pythonインストールの目的
Wordpressにpythonのスクレイピングスクリプトが仕込めないか確認したい。「外部からSSH接続してMySQLに接続する」パターンも検討したが、外部接続する理由に乏しくNG(むしろ負担が重い)。極力、エックスサーバー内で完結したい。
前提
- エックスサーバーには管理者権限がない
http://blog.saboh.net/xserverandpython/-
解決策①:virtualenvを利用する。
ただ以下のページを見ると、導入する意味は特に無いんじゃね?って感じがする。http://www.zopfco.de/entry/2017/04/03/233811 - 解決策②:サーバーを変える(AWSとか)。
-
解決策③:エックスサーバーで用意されているPython3を使う。
https://teratail.com/questions/124782 - 解決策④:linuxbrewを使用する(これで簡単にインストールできた…)
-
解決策①:virtualenvを利用する。
- エックスサーバーはpython3.3.1を利用できる
https://www.xserver.ne.jp/manual/man_program_soft.php - エックスサーバー上で環境構築をする必要がある
https://qiita.com/ShimantoAkira/items/37d09aca38d9e46ddd9a
"WindowsやOSX上で正しく動作したからといって、Linux上でも正しく動作するとは限りません。
そのため、開発する環境(自分のPC)と、公開する環境(サーバー)のOSを揃える必要があります。"
https://qiita.com/d-yokoi/items/e27193b2f742a058af6e - スクレイピングで取得したデータを溜め込むMySQLのテーブル作成が必要
方針
- エックスサーバーでPythonスクリプトが動くかテスト
- ローカル環境で開発
- サーバー環境とローカル環境のOSを揃える
https://qiita.com/d-yokoi/items/e27193b2f742a058af6e - エックスサーバーに開発環境を移行
エックスサーバーで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 <ライブラリ名>
これで解決。