Make it possible with Python.

最近Pythonから離れ気味、その他物作りに寄り気味です。

Spyderが起動しなくなった問題と、その解決法

PythonのSpyderが起動しなくなった。

Spyder.exeを実行すると、一瞬コマンドプロンプトに文字列が表示された後、エラーで終了しているように見える。

Python(x,y)まるごとアンインストール、python27フォルダを全削除して再インストールしても起動しない。

spyderのDocumentsにあった、--reset も、--defaultsもきかない。

でも、コマンドラインで起動するとコマンドプロンプトの内容が消えずに残ったので、内容の確認ができた。

C:\Users\USER_name.spyder2.spyder.ini

でエラーが起きているらしい。

そのファイルを開いてみたら、ファイルの後半が盛大に文字化けしていた。

2014- 05-08 23 :59:34,  Info  CBSLSessio n: 30370 510_5316 99695 in itialize d by cli ent Wind@owsUpd 錢

みたいな文字列がひたすら並んでいる。 このファイルをリネームしたら、新規に設定ファイルが生成されて、Spyderが起動できた。

たしか、5月8日頃にPCのシステム全体がフリーズしたので、その余波ではないかと思われます。

virtutalenv絡みで、Pythonと環境変数についてちょっと調べた

virtualenvは環境変数を変更することで、仮想環境を作り出しているらしい。

そこで、

  1. 環境変数とはどういうもので、

  2. Pythonではどう使われていて、

  3. virtualenvではどう使われているのか

について、少し調べてみた。たぶん間違いもあると思います。

環境変数とは

一言で言えば、Windowsシステム全体のプログラムが共有する変数のこと。

Windowsシステムが使用する環境変数は、特別な意味を持つ。 例えばPATH変数は、「プログラムを実行するときにそのフォルダを探す」という意味を持つ。

環境変数をマスターする [Javaプログラミング] All About

virtualenv絡みでは、PYTHONPATH と PYTHONHOME がよく出てくるので、それについて調べてみる。

PYTHONが使う環境変数

まとめると、こんな意味らしい。

PYTHONHOMEは Pythonに共通で含まれる標準ライブラリのパスを、 PYTHONPATHは Pythonに追加されるモジュールファイルの検索パスを追加するらしい。

PYTHONHOME(原文)

標準 Python ライブラリの場所を変更します。デフォルトでは、ライブラリは prefix/lib/pythonversion と exec_prefix/lib/pythonversion から探されます。ここで、 prefix と exec_prefix はインストール依存のディレクトリで、両方共デフォルトでは /usr/local です。

PYTHONHOME が1つのディレクトリに設定されている場合、その値は prefix と exec_prefix の両方を置き換えます。それらに別々の値を指定したい場合は、 PYTHONHOME を prefix:exec_prefix のように指定します。

PYTHONPATH(原文)

モジュールファイルのデフォルトの検索パスを追加します。この環境変数のフォーマットはシェルの PATH と同じで、 os.pathsep (Unix ならコロン、 Windows ならセミコロン) で区切られた1つ以上のディレクトリパスです。存在しないディレクトリは警告なしに無視されます。

通常のディレクトリに加えて、 PYTHONPATH のエントリはピュアPython モジュール(ソース形式でもコンパイルされた形式でも) を含む zip ファイルを参照することもできます。拡張モジュールは zip ファイルの中から import することはできません。

デフォルトの検索パスはインストール依存ですが、通常は prefix/lib/pythonversion で始まります。 (上の PYTHONHOME を参照してください。) これは 常に PYTHONPATH に追加されます。

上の インターフェイスオプション で説明されているように、追加の検索パスディレクトリが PYTHONPATH の手前に追加されます。検索パスは Python プログラムから sys.path 変数として操作することができます。

[http://docs.python.jp/2/using/cmdline.html#using-on-envvars:title]

ちなみに、実行中のPythonインタプリタから上記pathを調べるには、インタプリタ上で

import sys
sys.path

を打てばOK。

ここで出てくるpathは、このように決まっているらしい。

カレントディレクトリを自動的に登録する。最初の空文字列”がこれです。
環境変数PYTHONPATHがあれば、そこに指定されたディレクトリを登録する。
レジストリにPythonPathエントリがあれば、そこで指定されたディレクトリを登録する。
環境変数PYTHONHOMEが設定されていれば、そこから、なければ、python.exeのあるディレクトリから、Lib\os.pyを特定し、PYTHONHOMEを推定して、必要なサブディレクトリをsys.pathに登録する。
PYTHONHOMEもPYTHONPATHも特定できず、レジストリのエントリもない場合は、デフォルトの相対パスが使われる。
モジュール検索パスに、拡張子 .pth のファイルがあれば、そこに書かれたパス(相対パスでも絶対パスでもよい)を、sys.path の最後に付け加える。

Python2.7 と Python3.3 を Windows で併用する | ユニマージュ

virtualenvがやっていること

activate.batをちょっと見てみたけど、理解できず中断。

期待された方、ごめんなさい。

わかる方、教えてください。

heroku で プロンプトからSSH-key 生成ができないので、全部GUIから実施した。

herokuの使い方を学び中。

PaaSやサーバーの知識皆無のため、一番シンプルな以下のチュートリアルから実施した。 https://devcenter.heroku.com/articles/getting-started-with-python

もちろんこれでも問題多発。

heroku初回ログイン後のSSH Key生成でエラー発生。

Could not find an existing public key.
Would you like to generate one? [Yn] Y
Generating new SSH public key.
 !    Could not generate key: 'ssh-keygen' は、内部コマンドまたは外部コマン
 !    操作可能なプログラムまたはバッチ ファイルとして認識されていません。

以下サイトを参考に、環境変数を作成してもダメ。念のためコマンドプロンプトやPCを再起動してもダメ。

herokuの初回ログイン時にキーが作れなかった時のメモ - Qiita

SSH Key生成はインストールしたSourcetreeでできそうなので、それでキーを作成。

SourceTree 設定手順 覚書【Windows】 - Qiita

さらに、作成したPublic keyを herokuのwebサイトからコピペで登録した。

これで行けるはず・・・?

※その他参考サイト Heroku で Flask + SQLAlchemy を使う - Twisted Mind

pythonは確かに簡単な言語だけど、webアプリとか、言語以外のいろいろなものが絡み合う使い方を求めると、結局かなり複雑になるんですね。

Python仮想環境virtualenvをPyscripterに適用する方法

Webサービスを作るためには、依存関係によるトラブルを防ぐために各アプリを仮想環境で作る必要があるらしい。

ということで、virtualenvを pipからインストールして、仮想環境を作ってみました。

が、ここから先が地獄でした。

仮想環境をactivateしても、SpyderやpyscripterなどのIDEで、それが適用されない。。

そして、この件に関する情報が日本語サイトに殆どない・・・・・・。

Pythonに日本語情報が少ないというのはよくきいていましたが、こういう、ちょっと深いところをやろうとすると、とたんに情報が少なくなるということなんですね。

結局、Spyderに適用することはあきらめ、Pyscripterについては、 以下のバッチファイルによりvirtualenvのactivateとPyscripterを行うことで、なんとか実現できました。

CALL W:\bin\v_env\Scripts\activate.bat
SET PYTHONHOME=%VIRTUAL_ENV%
"W:\Application_settings\PyScripter\PyScripter.exe" --PYTHON27 --PYTHONDLLPATH "C:\Windows\SysWOW64" %1 %2 %3 %4 %5

仕組みはわかっていないので、どなたか教えていただけると嬉しいです。

参考URL: FAQ - pyscripter - An open-source Python Integrated Development Environment (IDE) - Google Project Hosting

念のためコメント欄より転載。

How do I use PyScripter with virtualenv? There's a problem if you use PyScripter with the remote python engine in a virutalenv environment. On Microsoft Windows, if ENV is your virtual python environment (created with 'python virtualenv.py ENV'), then after switching to this environment, the python.exe executable is located in C:\Python27\ENV\Scripts. (Or whatever your Python version and installation directory is) However, PyScripter expects it to be in C:\Python27\ENV. You can use this workaround: Create a symbolic link from C:\Python27\ENV\python.exe to C:\Python27\ENV\Scripts\python.exe . On Windows Vista or 7, you may use the mklink command to do this:

mklink C:\Python27\ENV\python.exe C:\Python27\ENV\Scripts\python.exe 

(you'll need administrator privilleges to do this). Start PyScripter via a batch file with the following commands:

CALL C:\Python27\ENV\Scripts\activate.bat SET PYTHONHOME=%VIRTUAL_ENV% START project.psproj

The first line activates the virtual environment ENV. The second line sets the PYTHONHOME environment variable to the one defined by virtualenv, i.e. 'C:\Python27\ENV'. This is that Python finds all libraries specific to that environment. The last line starts PyScripter via a project file. You might as well call PyScripter.exe directly. Versions tested: Python 2.7.3 PyScripter 2.5.3.0 x86 virtualenv 1.8.2 on Windows 7 (32 bit)

Python勉強記録 サーバー確保とgitについて

Webサービスをアップするためのサーバー選びなどについて調べてみたので、メモ。 知らないことだらけで混乱しつつ、進んではいるはず。

Webサービスを公開するサーバーは、PaaSのheroku

herokuとさくらVPSを候補に絞り、比較しました。 以下の理由から、まずは、herokuにしました。 herokuのさくらVPSに対する比較。

Pros

  • 覚える知識量が少なくて済む。
  • 罠にかからなければ無料

Cons

  • 機能に制約があるらしい。
  • 海外サーバーなので遅い。
  • Linux全般の知識が余り身につかない?

知っておきたい!Herokuを使う上では当たり前?の16の常識 | mah365

herokuに独自ドメイン当ててホスティングっぽく使ってみる│でろぐ

herokuでPythonに慣れたら、必要に応じてさくらVPSか、業界標準と噂のAWSに移動しようと思います。

herokuを利用するためにはgit使用が必要?

という話を読んだので、Windows用GUI gitクライアントのSourceTreeをインストールしました。

gitについても概念と、作業の一通りの流れを知りました。

簡単なコードを1人で作るだけなので、メリットはあまりない気もしますが、、早く実作業で使ってみたいです。

Gitを使ったバージョン管理【Gitの基本】 | サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ

サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ

SourceTree for WindowsからGitを利用する (1/3):CodeZine

gitホスティングサービスはBitBucket

gitはシステムの名称で、githubはそれを利用したホスティングサービスらしいですね。 ただ、githubは無料アカウントだとローカルレポジトリを作成できず、ソースコードを非公開にできないそうなので、githubなみに有名らしいBitBucketにしました。

Gitホスティングサービス5選【比較表付き】 | Find Job ! Startup

GitHubとBitbucketの比較:Webデザイナーの業務にはBitbucketが向いている | Internet | ウェビンブログ

しゅんたっくの開発日誌: 私がリモートリポジトリとしてgithubではなくbitbucketを使う6つの理由

Python勉強記録 進め方と Pandasによるデータ処理...

私ははPythonの勉強のため、簡単なプログラムを作ろうとしています。 今作ろうとしているのは、データを集めて、それを元に予測値を出すプログラムです。

こんな流れで一から勉強しながら作業中。

1.データ収集

2.データ整形(?)

3.手動(まずはExcel)でデータ分析・予測式作成

4.上記データ収集、整形、分析、予測のPythonによる自動化

5.Web上で誰でもアクセスできるように

現在は2の途中。

分析したいデータは集まって、整形も目処がついてきました。

ここから先、どこまでPythonでやって、どこからExcelでやればいいのか迷ったので、少し前に買ったこの本を読んでみました。

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

この本で扱うのは以下のライブラリということです。

  • NumPy ・・・ 高速な数値計算用?
  • pandas ・・・ データ構造と、それを扱うための関数?
  • matplotlib ・・・ データ可視化、グラフ描画用
  • IPython ・・・ よくわからない。「全てを結びつけるツール」とのこと
  • SciPy ・・・ NumPyより複雑な科学計算用?

今回知りたいのは、Excelにデータを渡すまでなので、Pandasについて読んでみました。

結果、Pandasでデータを整えてからExcelに渡すことに決めました。

理由は、例えばこんなことがそれぞれ1行のコードでできるらしいため。

  • データ欠けに文字列や平均値などを代入できる。(.fillna メソッド)
  • 空データなど、任意の値が入った点に別の値を代入できる(ブールインデックス参照)

他にもやりたい処理がいろいろ入ってそうな雰囲気があります。

いままで、上記のライブラリについて、「データ解析が早くて楽にできるらしい」という漠然としたイメージしかありませんでしたが、こんなことができるんですね。 

コードを書くこと自体に慣れないうちは便利な関数やメソッドに頼らず、一つ一つ手で書いた方がいいのか、悩みましたが、少しでもコードが短くなることを目指した方がいい気がするので、Pandasを使ってみます。

forループでリストの中身を書き換える方法 Python勉強記録

やりたいこと

リストに含まれる値のうち、条件に適合するものだけを書き換える。

間違った方法

以下のような単純なforループでは実現できない。

line = "sdf2as23d"

chars = list(line)

chars_time =

for char in chars:

    if char == str(2):
        char = 5

手元の本、"初めてのPython" によると、 forループの中で char の部分を書き換えても、それはcharsの要素を書き換えたわけではないと書かれている。 代わりに、以下の方法が望ましい方法として示されていた。

正しい方法

range(len(chars)) で、繰り返し回数を指定して、書き換えたい変数のインデックスを順に辿るforループを回すことで実現できる。

line = "sdf2as23d"

chars = list(line)

for i in range(len(chars)):

    if chars[i] == str(2):
        chars[i] = 5

いつもはwebで軽く検索する方が早く解決できるんだけど、はじめてこの本が役立った。

初めてのPython 第3版

初めてのPython 第3版