Atom+Hydrogen で Python 実行時のカレントディレクトリがおかしかった際の対処

事の発端

Atom+Hydrogen で Python のファイルを実行させたが、同じカレントディレクトリ内のモジュールをインポートできず、

ModuleNotFoundError: No module named '~~'

などとエラーを出した。

検証プロセス

  • Python で直接動かすとうまくいくのか → 成功
  • Atom+Hydrogen に戻り、ファイルに
import sys, os
sys.path.append(os.chdir())

と追加してはどうか → 失敗

ModuleNotFoundError: No module named '~~'

などとエラーを出す。

  • os.chdir() を使わず以下のように working folder (カレントディレクトリ) のパスを手打ちで入力するのはどうか → 成功
import sys
sys.path.append("working folder のパス")

などと書き込めば、うまく動く。
ただし、module を読み込みたいすべてのファイルに追記しなければならず非効率。

  • この時、os.chdir() で working folder がきちんと参照されていないことに気づく。

実際、print(os.chdir()) で表示されるのが working folder ではなく、プロジェクトフォルダー内の一番最初のフォルダーになっている。

解決方法

Hydrogen の Settings に Directory to start kernel in という項目があり、そのデフォルトである

The first started project's directory (default)

から

current directory of the file

に変更

TensorFlow と Keras で警告【2019/08/22, numpy-1.17.0】

問題

Python で tensorflow (あるいは keras)使おうと思ったら警告出まくった。
例:FutureWarning: Passing (type, 1) or '1type' as a synonym of type is deprecated; in a future version of numpy, it will be understood as (type, (1,)) / '(1,)type'.

解決策

調べたら numpy の最新版 (ver.1.17.0) に tensorflow (ver1.14.0) がまだ対応してないことが原因だと判明。
numpy-1.17.0 から numpy-1.16.4 にダウングレードして無事解決。
詳しい解決方法は、参考先にて。

参考

github.com

余談

この問題はどうやらここ数週間の話らしい。
というか numpy-1.17.0 がリリースされてからの出来事。

あと記事にしてないけど、Python のバージョンが古いと theano が上手く動かないので、Python のホームページに行って最新版にしておきましょう。
自分はそれで1時間ほど?時間を費やしてしまった。そんなにかかってないかも。。。

ダウングレードしたり、アップグレードしたり大変だな。。。

Google 検索を便利にするアドオン

Google 検索の画面で、
サイト名にフォーカスするショートカットキーがないか探していた。

解決策

Google Chrome(あるいは Firefox)に、
拡張機能Google Search Navigator」を追加すれば良い。
※ 2018/12/15現在、「Web Search Navigator」に名前が変更されているようです。
 

使い方

検索結果画面にて、以下のショートカットキーが使える。

Google Chrome の場合

  • 「↓」または「j」: 次の検索結果を選択
  • 「↑」または「k」: 前の検索結果を選択
  • 「/」または「Esc」: 検索ボックスにフォーカス
  • 「Enter」または「Space」: 検索結果を開く
  • 「Ctrl+Enter」または「⌘+Enter」または「Ctrl+Space」: 裏に新規タブで開く
  • 「Ctrl+Shift+Enter」: 新規タブで検索結果を開く
  • 「a」または「s」: 項目「すべて」で検索結果を表示
  • 「i」: 項目「画像」で検索結果を表示
  • 「v」: 項目「動画」で検索結果を表示
  • 「m」: 項目「地図」で検索結果を表示
  • 「n」: 項目「ニュース」で検索結果を表示

Firefox の場合

上記に加えて、以下のショートカットが使える

  • 「←」または「h」: 前の検索結果ページに移動
  • 「→」または「l」: 次の検索結果ページに移動

 

参考になったサイト

最終的に下のサイトにぶちあたったことで解決したけど、よくよく見てみると、
「I created an open source extension to fix this and make keyboard shortcuts configurable.
You can install it from the Chrome Webstore: Google Search Navigator.
Hope you find it useful, but in any case- feedback is welcome!」
と言っているので、どうやら製作者本人に行きついたみたい。ありがたや。
superuser.com

感想

めちゃめちゃ便利で大満足。というかそれ以上の恩恵が得られて、感動すら覚える。
便利さでは、使えるキーが2つ多い分 Firefox に軍配が上がるかな。
と言っても、そのうち Chrome の方でも対応してくれるんじゃないかと思ってる。
すごく良いアドオンなので、使う人がどんどん増えると良いなぁ・・・。

Windows+Python で writer="ffmpeg" を使えるようにする

matplotlib でグラフを作成し、MP4形式で保存する方法を探していた。
 参考:Pythonのmatplotlibでgifアニメを作成する | 自調自考の旅
このサイトを参考にグラフを作成し、保存を下のコードで試みた。

ani.save("test.mp4", writer="mpeg4")

しかし、下のエラーが出て上手く行かない。

ValueError: Cannot save animation: no writers are available. Please install ffmpeg to save animations.

エラーの指示通り、下のサイトを参考に ffmpeg インストールし、パスも設定した。
しかし、やはり上手く行かない。
 参考:windowsにffmpegをインストールする | ぱーくん plus idea
困り果てていたが、偶然 Anaconda のサイトにぶち当たり、無事解決した。
 参考:Ffmpeg :: Anaconda Cloud

解決策

コマンドプロンプトを立ち上げ以下を入力して実行する。

conda install -c menpo ffmpeg

インストールに時間はかかるものの、writer="mpeg4" が機能するようになる。
インストールして待つこと以外、何もしなくてよい。

※ 2018/05/06 追記
以下のサイトを見ると、上のやり方では ffmpeg が少し古いバージョンになるらしい。
 参考:python - Matplotlib-Animation "No MovieWriters Available" - Stack Overflow
そこで以下のコマンドをコマンドプロンプトで実行すれば良い

conda install -c conda-forge ffmpeg

Atom で BibTeX 環境を整える

 

はじめに

ようやく重たい腰を上げて、 BibTeX 環境を整えることにした。
理想は、BibTeX ファイルをそれ専用のフォルダに置き、
Atom のパッケージ latexer を機能させること。
あと、理解できなかったので、latexmk ファイルに手を出さないこと(白目)。

 

環境

 

BibTeX を専用フォルダに置く

カレントディレクトリにいちいちファイルを作るのは、とても面倒なので、
TeX Live で用意されているフォルダ

C:/texlive/texmf-local/bibtex/bib/local

に、BibTeX ファイルを置くことにする。(もちろん、このフォルダである必要はない)
ここでは、ファイル名を「foo.bib」とし、参照リストも作成し終えたものとする。

 

BibTeX の読み込み

参考文献を置きたいタイミングで、TeX ソースコードに下を書く。

\bibliographystyle{amsplain}
\bibliography{C:/texlive/texmf-local/bibtex/bib/local/foo.bib}

すると、\cite{ とタイプするだけで、検索ボックスと候補が並ぶ。
(著者名や論文名で検索をかけて、該当するものを Enter)
ここで、上記ではファイル名の絶対パスを指定しているが、
「¥」や「\」ではなく「/」でフォルダを区切っているので、注意。

 

BibTeX 用フォルダを使わない場合(非推奨)

一応、上記以外の方法も紹介しておく。
まず、BibTeX ファイル「foo.bib」をカレントディレクトリにおく。
(毎回ファイルを作ることになるため、非推奨としている)
参考文献を置きたいタイミングで、TeX ソースコードに下を書く。

\bibliographystyle{amsplain}
\bibliography{foo}

 

感想

ものすごく単純なことに半日を費やしてしまった。
難しいことを何もしなくていいのに、これになかなか気づけなかった・・・。
変に理解不能なマクロを組まずに済んだので、良しとしよう・・・。

ちなみに、自分は documentclass を article や amsart でやっているので、
LaTeX Font: Font shape `JT1/gt/m/it' undefined using `JT1/gt/m/n' instead
などと、フォントに関する注意がたくさんでる。
これは jsarticle でやれば、注意がでなくなるので、気にしないことにした。
消す方法は他にもあるけど、TeX ソースコードに変なこと書きたくないし。

 

Atom で TeX 環境を整える

 

環境

OS: Windows 10 (64 bit) (←32 bit 版ではない)
※ OS が異なる場合、差異が生じますので、ご容赦ください。
 

インストール

AtomTeX Live をインストールする。

1.Atom のインストール

  • Atom 公式サイト https://atom.io/ を開く。
  • 下のようなボタンがあるので、クリックする。

  • フォルダ「ダウンロード」を開くと、ファイル「AtomSetup-x64.exe」があるはずなので、それをダブルクリックして実行する。

2.TeX Live のインストール

※とても時間がかかるので、TeX Live のインストールは寝る前などがおすすめ。

f:id:lightology:20180125150238p:plain

  • フォルダ「ダウンロード」を開くと、ファイル「install-tl-windows.exe」があるはずなので、それを右クリックして、「管理者として実行」をする。

 ※上手く行かなければ、TeX Live - TeX Wiki を参考に、TeX Live をインストールする。
 

Atom の設定

1.パッケージのインストール

  • 初回起動の際、下のようなボックスが出るので「No, Never」を選択

  • キーボードの「Ctrl」と「,」を同時押下(以下、「ctrl-,」と書く)し、「Settings」を開く。
  • 下のように「Install」をクリックし、パッケージ名を検索してインストールする。

  • 以下のパッケージを検索して、インストール。
latex
latexer
language-latexsimple
pdf-view
project-manager
file-icons
japanese-menu

※「language-latex」だと数式中で Snippets が機能しないので、現状では「language-latexsimple」がおすすめ。

2.個人設定

  • 下の順でクリックし、個人設定(ファイル名「config.cson」)を開く。

  • そこに以下を追加で書き込み、「ctrl-s」を同時押下して保存。

(下のをコピペするなら、カーソルを乗せると、右らへんに「select」ボタンが現れるので、そこをクリック)

"*":
  "autocomplete-plus":
    confirmCompletion: "enter"
  core:
    telemetryConsent: "no"
  editor:
    showIndentGuide: true
    showInvisibles: true
  latex:
    cleanPatterns: [
      "**/*.aux"
      "**/*.aux.bak"
      "**/*.bbl"
      "**/*.bcf"
      "**/*.blg"
      "**/*.dvi"
      "**/*.fdb_latexmk"
      "**/*.fls"
      "**/*.idx"
      "**/*.idx.bak"
      "**/*.ilg"
      "**/*.ind"
      "**/*.lof"
      "**/*.log"
      "**/*.lol"
      "**/*.lot"
      "**/*.nav"
      "**/*.out"
      "**/*.ps"
      "**/*.snm"
      "**/*.synctex.gz"
      "**/*.toc"
      "/**/_minted-{jobname}"
      "/{output_dir}/sage-plots-for-{jobname}.tex"
      "/missfont.log"
      "/texput.log"
      "/texput.aux"
    ]
    engine: "platex"
  "pdf-view":
    fitToWidthOnOpen: true
  "project-manager":
    alwaysOpenInSameWindow: true
  welcome:
    showOnStartup: false
".latex.tex.text":
  "bracket-matcher":
    autocompleteCharacters: [
      "()"
      "[]"
      "{}"
      "$$"
    ]
  editor:
    tabLength: 4
    tabType: "hard"

3.シートの設定

  • そこに以下を追加で書き込む。
atom-text-editor {
  .syntax--math {
    color: hsl(128, 80%, 40%);
  }
}

 

更に頑張って設定

以上の設定で十分機能するが、より便利にし、なおかつ Atom の使い方を理解するために、以下の設定をする。

1.「project-manager」の設定

  • 予め TeX フォルダを作成しておく。

 ※ドキュメントフォルダ下に作らないこと。
  Windows 10 になってから、アクセス権の関係で TeX Live がうまく機能しないことがある。

  • 「ctrl-shift-a」を同時押下し、ドキュメントフォルダ内の TeX フォルダを選択し「フォルダーの選択」を押す。
  • 「ctrl-\(または ctrl-¥)」を同時押下し、下のような TeX のプロジェクトツリーが表示されるのを確認。

  • 「ctrl-shift-p」を同時押下し、コマンドパレットを開く。

  • コマンドパレットの検索欄に
Project Manager: Save Project

を入力し、これを実行する。

  • 以下のような画面が現れるので、「Save」を押す。

2.Snippets の設定

  • 「パッケージ」→「Package Generator」→「Generate Atom Package」とクリック。

  • 現れたパレットの「my-package」を「my-snippets-latex」に書き換え「Enter」を押下。

  • 「my-snippets-latex」内のフォルダとファイルをすべて削除。
  • フォルダ「snippets」を作成。

  • フォルダ「snippets」内にファイル「symbols-greek.cson」を作成し、そこに以下を書き込む。
'.math.latex':
  '\\alpha':
    'prefix': 'a'
    'body': '\\\\alpha'
  '\\beta':
    'prefix': 'b'
    'body': '\\\\beta'
  '\\Gamma':
    'prefix': 'G'
    'body': '\\\\Gamma'
  '\\gamma':
    'prefix': 'g'
    'body': '\\\\gamma'
  '\\Delta':
    'prefix': 'D'
    'body': '\\\\Delta'
  '\\delta':
    'prefix': 'd'
    'body': '\\\\delta'
  '\\epsilon':
    'prefix': 'ep'
    'body': '\\\\epsilon'
  '\\varepsilon':
    'prefix': 'vep'
    'body': '\\\\varepsilon'
  '\\zeta':
    'prefix': 'z'
    'body': '\\\\zeta'
  '\\eta':
    'prefix': 'et'
    'body': '\\\\eta'
  '\\Theta':
    'prefix': 'Th'
    'body': '\\\\Theta'
  '\\theta':
    'prefix': 'th'
    'body': '\\\\theta'
  '\\vartheta':
    'prefix': 'vth'
    'body': '\\\\vartheta'
  '\\iota':
    'prefix': 'i'
    'body': '\\\\iota'
  '\\kappa':
    'prefix': 'k'
    'body': '\\\\kappa'
  '\\Lambda':
    'prefix': 'L'
    'body': '\\\\Lambda'
  '\\lambda':
    'prefix': 'l'
    'body': '\\\\lambda'
  '\\mu':
    'prefix': 'm'
    'body': '\\\\mu'
  '\\nu':
    'prefix': 'n'
    'body': '\\\\nu'
  '\\xi':
    'prefix': 'x'
    'body': '\\\\xi'
  '\\Pi':
    'prefix': 'p'
    'body': '\\\\Pi'
  '\\pi':
    'prefix': 'p'
    'body': '\\\\pi'
  '\\varpi':
    'prefix': 'vp'
    'body': '\\\\varpi'
  '\\rho':
    'prefix': 'r'
    'body': '\\\\rho'
  '\\varrho':
    'prefix': 'vr'
    'body': '\\\\varrho'
  '\\Sigma':
    'prefix': 'S'
    'body': '\\\\Sigma'
  '\\sigma':
    'prefix': 's'
    'body': '\\\\sigma'
  '\\varsigma':
    'prefix': 'vs'
    'body': '\\\\varsigma'
  '\\tau':
    'prefix': 't'
    'body': '\\\\tau'
  '\\Upsilon':
    'prefix': 'U'
    'body': '\\\\Upsilon'
  '\\upsilon':
    'prefix': 'u'
    'body': '\\\\upsilon'
  '\\Phi':
    'prefix': 'Ph'
    'body': '\\\\Phi'
  '\\phi':
    'prefix': 'ph'
    'body': '\\\\phi'
  '\\varphi':
    'prefix': 'vph'
    'body': '\\\\varphi'
  '\\chi':
    'prefix': 'c'
    'body': '\\\\chi'
  '\\Psi':
    'prefix': 'Ps'
    'body': '\\\\Psi'
  '\\psi':
    'prefix': 'ps'
    'body': '\\\\psi'
  '\\Omega':
    'prefix': 'O'
    'body': '\\\\Omega'
  '\\omega':
    'prefix': 'o'
    'body': '\\\\omega'
  '\\varGamma':
    'prefix': 'vG'
    'body': '\\\\varGamma'
  '\\varDelta':
    'prefix': 'vD'
    'body': '\\\\varDelta'
  '\\varSigma':
    'prefix': 'vS'
    'body': '\\\\varSigma'
  '\\varUpsilon':
    'prefix': 'vU'
    'body': '\\\\varUpsilon'
  '\\varTheta':
    'prefix': 'vTh'
    'body': '\\\\varTheta'
  '\\varPhi':
    'prefix': 'vPh'
    'body': '\\\\varPhi'
  '\\varLambda':
    'prefix': 'vL'
    'body': '\\\\varLambda'
  '\\varPsi':
    'prefix': 'vPs'
    'body': '\\\\varPsi'
  '\\varXi':
    'prefix': 'vX'
    'body': '\\\\varXi'
  '\\varOmega':
    'prefix': 'vO'
    'body': '\\\\varOmega'
  '\\varPi':
    'prefix': 'vP'
    'body': '\\\\varPi'
  '\\varkappa':
    'prefix': 'vk'
    'body': '\\\\varkappa'
  • フォルダ「snippets」内にファイル「symbols-hebrew.cson」を作成し、以下を書き込む。
'.math.latex':
  '\\aleph':
    'prefix': 'aleph'
    'body': '\\\\aleph'
  '\\digamma':
    'prefix': 'digamma'
    'body': '\\\\digamma'
  '\\beth':
    'prefix': 'beth'
    'body': '\\\\beth'
  '\\daleth':
    'prefix': 'daleth'
    'body': '\\\\daleth'
  '\\gimel':
    'prefix': 'gimel'
    'body': '\\\\gimel'
  • フォルダ「snippets」内にファイル「brackets.cson」を作成し、以下を書き込む。
'.math.latex':
  '\\left \\right':
    'prefix': 'left-right'
    'body': '\\\\left $1 \\\\right $0'
  '()':
    'prefix': 'soft-b'
    'body': '\\\\left ( $1 \\\\right )$0'
  '{}':
    'prefix': 'curly-b'
    'body': '\\\\left \\\\{ $1 \\\\right \\\\}$0'
  '[]':
    'prefix': 'hard-b'
    'body': '\\\\left [ $1 \\\\right ]$0'
  '||':
    'prefix': 'abs'
    'body': '\\\\left | $1 \\\\right |$0'
  '|| ||_{}':
    'prefix': 'Norm'
    'body': '\\\\left \| $2 \\\\right \|_{$1}$0'
  '|| ||':
    'prefix': 'norm'
    'body': '\\\\left \| $1 \\\\right \|$0'
  '\\Bra':
    'prefix': 'Bra'
    'body': '\\\\Bra{$1}$0'
  '\\Ket':
    'prefix': 'Ket'
    'body': '\\\\Ket{$1}$0'
  '\\Braket':
    'prefix': 'Braket'
    'body': '\\\\Braket{ $1 | $2 }$0'
  '\\Set':
    'prefix': 'Set'
    'body': '\\\\Set{ $1 | $2 }$0'
  • フォルダ「snippets」内にファイル「fractions.cson」を作成し、以下を書き込む。
'.math.latex':
  '\\frac':
    'prefix': 'frac'
    'body': '\\\\frac{$1}{$2}$0'
  '\\tfrac':
    'prefix': 'tfrac'
    'body': '\\\\tfrac{$1}{$2}$0'
  '\\dfrac':
    'prefix': 'dfrac'
    'body': '\\\\dfrac{$1}{$2}$0'
  'd/dx':
    'prefix': 'diff'
    'body': '\\\\frac{d$2}{d${1:x}$2}$0'
  'partial d/dx':
    'prefix': 'pdiff'
    'body': '\\\\frac{\\\\partial$2}{\\\\partial ${1:x}$2}$0'
  • フォルダ「snippets」内にファイル「integrals.cson」を作成し、以下を書き込む。
'.math.latex':
  '\\int_{}^{}':
    'prefix': 'Int'
    'body': '\\\\int_{$2}^{$3} $4 \, d${1:x}$0'
  '\\int':
    'prefix': 'int'
    'body': '\\\\int $2 \, d${1:x}$0'
  '\\iint_{}':
    'prefix': 'Iint'
    'body': '\\\\iint_{$2} $3 \, d${1:x}$0'
  '\\iint':
    'prefix': 'iint'
    'body': '\\\\iint $2 \, d${1:x}$0'
  • 以上を終えた段階で、プロジェクトツリーは下のようになる。

  • ここで、一旦 Atom をすべて閉じ、Atom を再起動する。
  • TeX を開くときは、「alt-shift-p」を同時押下し、現れたパレットの TeX を選択。
  • 新たに latex 用の Snippets を追加したい場合、「ctrl-,」を同時押下して設定を開く。
  • 次に、下の順に「パッケージ」クリック→「my-snippets-latex」を検索→「my-snippets-latex」の名前の横らへんをクリック。

f:id:lightology:20180125235307p:plain

  • 下のような画面が開けるので、「View Code」をクリック。

f:id:lightology:20180125235718p:plain

  • 「my-snippets-latex」のプロジェクトツリーが現れるので、好きなように編集。

 
 

感想

Snippets はパッケージをダウンロードした方が良いから、そのうち修正するかも。
自作して、GitHub に上げるのも良いけど、やり方がよくわからない・・・。

Atom で言語ごとに文字コードを指定したい

新規で書き始める際に、自動で文字コードが変更されるようにしたかった。
例えば、C言語の新規ファイルを開いたら Shift JIS で、Python を開いたら UTF-8 というように。
それが解決できたのでメモ。
※パッケージ「auto-encoding」を入れてると、使えないかも・・・。

解決策

個人設定(config...)から、ファイル「config.cson」を開き、そこに以下を書き込む

".c.source":
  core:
    fileEncoding: "shiftjis"
".python.source":
  core:
    fileEncoding: "utf8"