QA@IT

pythonのimportについて

4608 PV

asanaというタスク管理サービスのapiを使用して、sublime textのプラグインを作っています。

https://github.com/yahsan2/SublimeAsana

またapiを使用するにあたって、ラッパーを使用しています。
https://github.com/pandemicsyn/asana

path/to/SublimeAsanaのディレクトリ上のファイルで、タスクを取ってくるコマンドを実行すると正常に動作するのですが、
それ以外のディレクトリで実行すると下記エラーが出てしまうので、こちらを解決したいです。

requests.exceptions.SSLError: [Errno 185090050] _ssl.c:328: error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib

path/to/SublimeAsana/asana/ のディレクトリ以下を削除すると、path/to/SublimeAsanaのディレクトリ上のファイルでも同様のエラーが出るので、asanaのモジュール?が読み込めていないのではないかと考えました。

from asana import asana

ただ上記コードでモージュルを読み込んでいたと思っていたのですがコメントアウトしても動作しますし、

from asana import fdasfasf

fdasfasfなど適当に存在しないディレクトリを書くとエラーが出ます。

path/to/SublimeAsana/asana/ のディレクトリ以外のディレクトリで動作するようになるのが、最終的に一番解決したいのですが、このimportについてどのようにして(どのタイミングで)モージュールを読み込んできるのかとかが全くわからないので、
何か解決の糸口など教えていただけますでしょうか?

  • プラグインの動かし方(設定ファイルの書き方、位置、今検証しているOSなど)を記載したり、「コマンドを実行」がどこで実行したものかなどを書いておくと確認しやすいです(ちょっと動かしてみましたがうまくいきませんでした) -
  • flied_onion さま
    動作環境などの記載が不十分であり、申し訳ありません。あれからググりながら色々触っていたところ、つい先程requests.getの引数にverify=Falseを追加することで上記エラー解決ができました。

    今後、質問の仕方などもう少し考えて行きたいと思います!
    親切に色々教えていただき本当に助かりました!
    -
  • 上記のつづきですが、うまくいかなかったものの、エラーはasana\asana.pyのget_basic_authで起きていたので配下への参照はできているように思います。エラーが _ssl.cエラーなのでsublime_package_controlなど通信を行っているものが参考になるかもしれませんね。 -
  • あ、解決したんですね、連投失礼。おめでとうございます。 -

回答

全体的によく内容をつかめていませんが、

Sublime Text 2でプラグインの読み込みは、sublime_plugin.py のreload_plugin で行ってると思います。(Windowsでの話になりますが他も同様でしょう。)

また、Sublime Text 2は基本的にローカル環境は無視しますので、ローカルなpython環境の情報は引き継がれないと思ってください。

path/to/SublimeAsanaのディレクトリ上のファイルで、タスクを取ってくるコマンドを実行すると正常に動作するのですが

これがコマンドプロンプトやターミナルからだと上手くいくという話であれば、
パスなどが足りてない可能性もあると思います。

編集 履歴 (0)
  • ご回答いただき有り難うございます。
    知識不足もあり、説明がうまくできず申し訳ありません。
    >これがコマンドプロンプトやターミナルからだと上手くいくという話であれば、
    >パスなどが足りてない可能性もあると思います。
    terminalからだと動作しますので、パスが足りてないと思うのですが、
    sublimetextで開いているファイルによってパスが違うので通し方がわかりません。。

    -
  • ちゃんと理解できていなくて恐れ入りますが、ここでいうパスっていうのはimport sublimeなどのことでしょうか? import asanaがうまく読み込めていないためのエラーだと思うのですが。。 -
  • ここでのパスはsys.pathとos.environ['path']の両方の意味ですが、どちらかというとsys.pathの方が意味合いは強いです。
    sublimeのコンソールでimport sys して sys.path として出てきたところからしかモジュールは読み取られないと思ってください。
    -
  • プラグインの場合はプラグインのパスも一時的に加わったかもしれません。sublimeは起動時にモジュールロード用のzipimporter仕込んだりしてますのでそのあたりの影響かなとは思ってます。 -
  • ちょっと(私のコメントが)ゴチャゴチャしてしまったので端的に言いますが、Terminalで動いてもSublimeの実行環境と違うのであんまり参考にならないです。そこに注意してください。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。