きゃべログ

プログラミングや電子工作などについての記事がほとんどです

libpython2.7.so.1.0: cannot open shared object file

0 件のコメント

最近SonyからNeural Network LibrariesというDeep Learningのライブラリが公開されたので試してみようと環境構築していました。

環境構築当時Python2.7にしか対応していなかったのでpyenvで環境構築しました。
Installation on Linux — Neural Network Libraries 0.9.4 documentation

ぐぐってみたら、どうもシンボリックリンクを貼れば解決するようだ。
Python エラー対処:error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory - 長生村本郷Engineers'Blog

そもそもはいってないからリンクはれない、きれそう

[vagrant@localhost nnabla]$ ldd /home/vagrant/.pyenv/versions/2.7/bin/python
linux-vdso.so.1 => (0x00007ffdbe3a5000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f22cb0c2000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f22caebe000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f22cacba000)
libm.so.6 => /lib64/libm.so.6 (0x00007f22caa36000)
libc.so.6 => /lib64/libc.so.6 (0x00007f22ca6a2000)
/lib64/ld-linux-x86-64.so.2 (0x00007f22cb2e7000)</module></module></string>

問題発生

pyenvでpython2.7系でnnablaをインストールしたときに、libpython2.7.so.1.0: cannot open shared object fileとなる問題が発生しました。

[vagrant@localhost nnabla]$ python -c "import nnabla"
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/vagrant/.pyenv/versions/2.7/lib/python2.7/site-packages/nnabla/__init__.py", line 16, in <module>
import _init # Must be imported first
ImportError: libpython2.7.so.1.0: cannot open shared object file: No such file or directory

解決方法

$ CONFIGURE_OPTS="--enable-shared" pyenv install 2.7.6

インストール時にオプションを設定する必要があるらしい。下記がソース

え?君せっかく Python のバージョン管理に pyenv 使ってるのに Vim の補完はシステムライブラリ参照してるの? - Λlisue's blog

まとめ

ひょっとしたらライブラリ側で解決されているかもしれませんが、同様の問題の解決の一助になれば幸いです。

0 件のコメント :

コメントを投稿

Amazon Kindleストアで一部の技術書が50%オフ中「夏のプログラミング特集」

0 件のコメント

久しぶりの投稿になりますが、どうしてもシェアしたいセールがあります。 その名もAmazon Kindleストア、夏のプログラミング特集。 2017年8月31日までなので買い忘れにご注意を。

Amazon.co.jp: 【50%OFF以上】夏のプログラミング特集 (8/31まで): Kindleストア

iOS開発入門書でSwift2時代の少し古い書籍があったりするので、 買うものは選ばないといけないですが、中にもベストセラー級の書籍があるので興奮しています。 いい本は高価なものが多いので今回のセールはかなりうれしいです。

このエントリではせっかくなので私が注目する書籍をピックアップしたいと思います。

Pythonの入門書です。機械学習やRaspberry Piのプロトタイピングなど最近活用の幅が広い言語なので、プログラミング初心者の方にはおすすめしたい1冊です。 ただし他の言語を習得済の方は公式チュートリアルを読んだほうが有意義かと思います。

ゲームアプリの数学 Unityで学ぶ基礎からシェーダーまで
SBクリエイティブ (2015-09-24)
売り上げランキング: 1,930

Unityについての本というよりは、しっかり数学の知識が書かれている印章です。 ぱらぱらめくって見ましたがUnity初学者には向かない本です。 さらに一歩すすんだスキルを身に着けたい方には良い本だと思いました。

実装の容易さからプログラミングはどんどん容易になってきているので、 こういったコンテンツのクオリティを高める書籍は是非今のうちに読んでおきたいと考えています。

これが今回1番の目玉商品ではないでしょうか。 Webアプリのセキュリティ本ではまずこれが出てくるという書籍です。 言語はPHPですが取り上げるセキュリティの問題は他の言語を使う人も知っておきたい内容じゃないかと思います。

以上4冊が今回のセール品全63冊からのピックアップ本です。 ひょっとしたらもっと良い本があるかもしれません。 もしイチオシの本があったら是非教えてください。 今年の夏はあんまりお金を使わないつもりだったけど、一気にお金が飛んでいきそうだ…。

0 件のコメント :

コメントを投稿

ToAtm:Python用Twitterのアクセストークンマネージャを作りました

0 件のコメント

credit: Pete Simon

アクセストークンの管理が面倒くさい

今更ながらPythonからTwitter APIを使ってみようと試みました。
複数のアカウントからAPIを叩こうとすると、どのアカウントがどのアクセストークンに対応づくかという管理が面倒でした。そこで今回はアクセストークンを管理するコードを書いてみました。

最初のうちはコンシューマーキーをコード内に直打ちして認証!みたいな力技をやってしまいがちなのですが、それはちょっとリスキーですね。GitHubなんかでソースを公開する場合であったり、あとはセキュリティの観点から1番理想的なのはデータベースに保存して管理することでしょう。

データベースがポピュラーな方法だと思いますが、今回は飽くまでプロトタイプレベルで簡単にコーディングするためにセットアップ不要の外部ファイルによる永続化という方法を取ってみました。本番環境に使えるかはあまり自信がないのでサポートツールだと思ってもらえれば幸いです。

まずいところがあるなーと思った方がいらっしゃればコメントお願いします!

機能

  • 複数アカウントのアクセストークンが簡単に管理できます。
  • アプリのAPIキーも同時に管理でき、簡単に呼び出せます。

注意点

出力されたデータベースファイル(keys.shelve)は外部に漏れないように取り扱ってください。セキュリティの観点からGitHubにPushするときにはkeys.shelveを.gitignoreに指定するなど対処が必要です。

入手

GitHubからクローンした上でご利用頂けます!
toatm.pyを開発したいpythonコードと同じところに入れましょう。そのディレクトリにアクセストークンが格納されるデータベースファイルが生成されます。
cabbage63/toatm: Twitter OAuth Access Token Manager for Python

使い方

Tweepyのインストール

このツールではその後にTweepyを使うことも想定してPythonのTwitter APIにアクセスするためのライブラリであるTweepyを使用しています。まずはTweepyを導入しましょう。

pip install tweepy

Gitからインストールしたい場合はこのような形でマニュアルインストールします。

git clone https://github.com/tweepy/tweepy.git
cd tweepy
python setup.py install

ToAtmを実行

本アプリ、ToAtmを実行します。

$ python toatm.py

使用するアプリのAPIキーを登録します

プロンプトが出るので指示に従って入力していってください。
これでアプリのAPIキーは登録完了です。

Please select mode.
        1 Update API keys
        2 Update Access tokens
        3 Show access tokens
        q Exit
>> 1
CONSUMER KEY: ************
CONSUMER SECRET: *************

アクセストークンを登録する

指示にしたがってブラウザから指定されたURLにアクセスし、そこで得られたVerifierをアプリで入力することでアクセストークンが登録されます。

Please select mode.
        1 Update API keys
        2 Update Access tokens
        3 Show access tokens
        q Exit

>> 2
Access: https://api.twitter.com/oauth/authorize?oauth_token=***************
Verifier: *******
Updated access token for @****** successfully.

Pythonアプリからアクセストークンを呼び出す

@hogeというユーザアカウントを想定して使用例を掲載します。

import shelve
# Open database file
d = shelve.open('keys.shelve')
print d["hoge"]

こちらのコードを実行するとd["hoge"]の内容として次のものが表示されます。

{'access_token': u'****', 'access_token_secret': u'****'}

アプリのコンシューマーキーも呼び出せます。

print d["consumer_key"]
print d["consumer_secret"]

str型で呼び出したい場合は次のように変換しましょう。

str(d["hoge"])

使用例: タイムラインの読み出し

あらかじめ@hogeというユーザのアクセストークンを登録していると想定します。

# -*- coding: utf-8 -*-

import shelve
import tweepy

# アクセストークンを登録したTwitter IDを入力(@hoge)
SCREEN_NAME = "hoge"

# データベースファイルを読み込み
d = shelve.open('keys.shelve')
consumer_key = d['consumer_key']
consumer_secret = d['consumer_secret']
access_token = d[SCREEN_NAME]['access_token']
access_token_secret = d[SCREEN_NAME]['access_token_secret']

# Tweepyをセットアップ
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

# メイン処理:タイムラインの読み出し
public_tweets = api.home_timeline()
for tweet in public_tweets:
    print tweet.text

まとめ

Python用のTwitter APIを利用した開発者向けのアクセストークンマネージャを作成・公開しました。
普段アクセストークンの管理に悩んでいる方はお試しください。

0 件のコメント :

コメントを投稿