Category: howto

  • pipenv2018.7.1とpip18.1の組み合わせはエラーになる

    不具合に遭遇したのでメモ。

    現象

    $ pipenv install {some_package}
    すると、エラー終了する。
    Pipfileやパッケージのインストール自体は完了している
    lockfileの作成あたりでコケている模様?

    原因

    エラーメッセージでググると同様の事象を見つけた。
    https://github.com/pypa/pipenv/issues/2871

    pipenv2018.7.1とpip18.1の組み合わせがエラーを起こしている模様。

    解決方法

    workaroundとしてはpipを18.0にする。
    ポイントとしては、pipenvの環境のほうのpipを18.0にする。

    $ pipenv run pip install pip==18.0

  • Pythonの環境構築にpipenvを使う

    pipenvというPythonの仮想環境構築ツールを使い始めました。詳細は公式を見れば良いとして分かりづらかったところのメモ書き。

    Pipenv: 人間のためのPython開発ワークフロー

    書いている時点のバージョンは以下
    $ pipenv –version
    pipenv, version 2018.7.1

    インストール

    繰り返しだが詳細は上記の公式サイトのドキュメントを読めば良い。macOSの場合Homebrewとpipを使う方法があるようですが、私はPythonのバージョン管理にpyenvも使っていてHomebrewの方で入れるとバージョンが変になりそうな気がしたのでpipの方でインストールしました(Homebrewで試してはいない)。

    $ pip install pipenv
    すると、下記のようにpyenv配下にpipenvがインストールされてる模様。
    $ which pipenv
    /Users/hkuro/.pyenv/shims/pipenv

    使い方

    任意のディレクトリで
    $ pipenv shell
    とすると、”カレントディレクトリの名前-{hash}”という名前のvirtualenvが~/.local/share/virtualenvs/配下に作成される。hashの部分は詳しく調べてないけど何らかのハッシュみたいなので、別の同名ディレクトリでpipenv shellしても別のvirtualenvとして作成される(そりゃそうか)。

    環境変数を設定することでカレントディレクトリに作成されるようにすることが可能(

    PIPENV_VENV_IN_PROJECT)。これは環境によって違いそうなのでpipenv shellするときのオプションであったほうが便利そうな気もする。
    カレントディレクトリにPipfileを作成してくれて、pipenv経由でパッケージをインストールするとPipfileの更新なども同時にやってくれる。これまでだとpip freezeとかいちいちしないといけなかった部分が、PHPでいうところのcomposerみたいな感じになっているということ、なんだと思った。

    9/21追記:任意のディレクトリでpipenv shellして環境が作成されたあと、そのディレクトリを別のパスに移動したあとにpipenv shellすると新規のvirtualenvが作成される、元の場所に戻すと前のvirtualenvに戻れるので、やはりsuffixのハッシュはカレントディレクトと連動している模様。

    virtualenvから抜けるには

    pipenv shellした環境はvirtualenvでsource activateした場合と違ってサブシェル中で動作しているようなので、環境を抜けるにはCtrl+Dかexitする必要がある。deactivateしてしまうとvirtualenvな環境からは実質抜けてるけどpipenvが起動したサブシェルからは抜けられないみたいな中途半端な状態になってしまうので注意する。

    環境の削除

    普通のvirtualenvなので、上記の~/.local/share/virutualenv/配下の該当ディレクトリを丸ごと削除すれば良さそうだけど、もしくはpipenv shellしたのと同じディレクトリでpipenv –rmとすれば対応する環境は削除される。

    その他

    繰り返しだが作成されるのは普通のvirtualenvなので、
    $ source ~/.local/share/virtualenv/hogehoge/bin/activate
    とかすれば任意のディレクトリで特定のvirtualenvに入ることもできる。

  • VSCodeでThree.jsの開発環境を整える(1)

    しばらく利用していなかったVisual Studio Codeをバージョンアップしてみたらすごく速く使いやすくなっていたので、すこし本格的に環境を構築して使ってみることにしました。VSCodeおよびnodeなどもこれまでごく基本的な利用しかしていないので、それらの知識のアップデートも兼ねます。

    とりあえず、JavaScript(Three.js)の開発環境を構築することを目的にします。

    • VSCodeのIntelliSenseを利用したコード補完ができること
    • ChromeまたはFireFoxでブレークポイントを利用したデバッグが可能なこと
    • デバッグはdockerのコンテナ環境で構築すること

    上記3点ができるようになることを目的として、
    まずは任意の.jsプロジェクトでthree.jsのコード補完が可能になることを目指します。

    新規プロジェクトフォルダを作成する

    任意のフォルダ名でプロジェクトフォルダを作成して、その中にcdします。

    $ mkdir myproject
    $ cd myproject
    

    npm環境を作成する

    まず、nodeのパッケージマネージャであるnpmが利用するpackage.jsonというファイルを作成します。これは以下のコマンドを利用するとjsonファイルが作成されます。自力で作っても別にいいと思う。

    $ npm init
    

    実行すると幾つか質問されるので答えていくが、とりあえずは適当(空欄)でもいいはず。

    Three.jsをnpmでインストールする 

    npmレポジトリにthreeというパッケージが存在するので、これをnpmコマンドでインストールします。注意点として、VSCodeのIntelliSenseがJavaScriptの補完をするためにはTypeScriptの型定義ファイル(?)を利用し、これはnpmで管理されているようなメジャーなものならばレポジトリで公開されているもののようなのだが、これをVSCodeが利用できるようにするためにはpackage.jsonのdependenciesリストに対象のモジュールがリストされている必要がある(VSCodeは、ここにリストされているモジュール名をヒントにAutomatic Type Acquisitionという機能を使って型定義ファイルを自動で探しにいく。もしくはjsconfig.jsonというファイルに明示的に宣言することも可能だが、今回は省略する)
    すなわち、以下のコマンドを経由してthreeモジュールをインストールする。

    $ npm install three --save
    

    –saveオプションを忘れるとpackage.jsonが更新されないので注意する。–saveオプションは指定したモジュールをインストールすると共に、package.jsonのdependenciesリストに追加する。

     動作確認

    以上でIntelliSenseは有効な状態となります。自分のモジュールの場合はどうするのかとかは今後調べる必要があるが、たぶんTypeScriptとかで書けということなんだと思う。

    main.jsとかの適当なファイルを作成して、

    var THREE = require('three');
    THREE.
    

    ここまでタイプしてCtl+Spaceとかすると、THREEの中にあるモジュールが補完対象としてリストされるようになっているはず。もしくは、.をタイプした時点で出てくるはず。これで暗記しなくてよろしい。

  • docker-composeで既存のnetworkに接続する

    docker-composeを利用してコンテナを起動した場合、通常だとdocker-compose.yml(プロジェクト)単位で
    内部ネットワークが作成される。これを、例えば別のdocker-compose.ymlファイルから起動されたコンテナのnetworkの中でコンテナを作成するには、network設定をdocker-compose.yml内に記述する

    既存のネットワークの一覧

    $ docker network ls
    

    コマンドを実行すると、以下のようにネットワークの一覧が表示される。例ではexisting_nw_defaultに接続するとする。

    $ docker network ls
    NETWORK ID          NAME                DRIVER
    a36b706eb5a6        bridge              bridge              
    7ee0cd187fbd        host                host                
    39be267aeb70        existing_nw_default      bridge              
    bb39f75ad969        none                null
    

    既存のネットワークに接続するdocker-compose.ymlの例

    デフォルトでexisting_nw_default内にコンテナを作成するには、docker-compose.yml内に以下のようなnetworkの記述を追加すれば良い。

    networks:
      default:
        external:
          name: existing_nw_default
    

     参照:https://docs.docker.com/compose/networking/

  • Raspbian with PIXEL閑環境で日本語環境の構築

     Raspberry Piの情報を細かく追っているわけではないので、知らない間にバージョンアップしてPIXELというデスクトップ環境になっていました。正確には、深く考えずにsudo aptitude sage-upgradeして再起動したらいきなり変わっていてびびった。
    ながらく初期インストールだけして放置していたRaspberry Pi初代(+ですらない!)を日本語かするときにPIXEL 以前の情報が多かったので、PIXEL環境で日本語入力ができるようになるまでのメモです。結論からいうと、すごく簡単になっているみたいです。
    1. 日本語フォントのインストール
      PIXELな環境からは初期で表示できるのかも?という情報もみたのですが、それをみたのがフォントをインストールした後でした…。まあ、減るもんでなしという感じでインストールしました。タカオフォントというのはIPAフォントの派生みたいです。

      $ sudo aptitude install fonts-takao 

    2. fcitx-mozc(インプットメソッド)のインストール
      界隈のブログ記事ではibus-anthyとかibus-mozcを入れてるケースが多かったけど、しらべるとibusは最近はあまりイケてなくてfcitxという系列が良いみたいなので、そちらを採用してみることにしました。なお、ibusとかfcitxというのがベースになるインプットメソッドで、変換エンジン(?)自体がAnthyとかmozcとか、という構成になるようです。なので選択肢としては、インプットメソッドとしてfcitxかibus、それぞれでの変換エンジンとしてanthyかmozcか、という考え方になるようです。このへんは正直よくわからん。

      $ sudo aptitude install fcitx-mozc
      上記で、メインメニューの「設定」のところに「fcitx設定」とか「mozc設定」とかの項目が追加されるので、そこで諸々を設定します。(ターミナル上でim-configを実行する必要があるかもしれない)

    3. 日本語ターミナル(不要っぽい)
      上記同様にjfbtermというのを入れないとターミナルで日本語が出ないよ、という記事が多いのですが、PIXEL環境では不要でした。標準のターミナルはLXTerminal 0.2.0というやつでした。 

    あとはPIXEL以前の環境と同様、ロケールやタイムゾーンの設定、あとはフォントを上述のTAKAOフォントに変えてあげたりすればOKです。

  • ASUSのルーターでTimeMachineを利用する方法

    ASUSのルーターRT-AC85UとWestern DigitalのWD Elements 2TBを購入して、TimeMachineバックアップを設定しようとしているメモ。

    MacはEl Capitanな状態です。

    1. HDD(WD Elements)をmacに接続し、「HFS+(ジャーナリング)」でフォーマット
    2. HDDをルーター(RT-AC85U)に接続
    3. ルーターの管理画面からUSBアプリケーション>TimeMachineをONに設定する
    4. 本来Macのファインダーの「共有」にルーターの名称がでる、、はず
    5. 出なかったのでFinderの「移動>サーバに接続」から「afp://<ルーターのIPアドレス>を入力
    6. 「共有」の所にルーターが接続済みになって表示
    7. TimeMachine環境設定にルーター上のBackups.backupdbが表示される
    本来、4のところで共有に表示されるはずなんだけど出なかったので、これは別の問題だと思う。
    古いAirmac Expressを2.5GHz帯に繋いでAirPlayも設定しているが、スピーカーのリストには出るけれど音が流れない(再生側を2.5GHz帯に接続すると音が鳴る)とかもあるので、なにかの設定がおかしいんだと思うけれど、これは別途調査することにする。

    <追記>
    たぶん解決した。設定方法は以下。
    http://blog.imho.jp/2016/11/asusmac.html

  • 外部ディスクの修復をかける方法(Mac)

    Mac(El Capitan)のTime Machine用の外部ディスクが不調になってしまったので、ディスク修復を試みました。

    アプリケーション>ディスクユーティリティ>First Aid
    をまずは試みたのですが途中で中断されてしまうので。fsckコマンドを試す。

    外部ディスクにfsckをかけるには、以下のようにします。

    $ sudo fsck_hfs -fy /dev/disk1s2

    fsck_hfsはHFSファイルシステムに対する修復で、-fでジャーナル機能が有効になっているボリュームにも修復を強制するようです。ディスクによりdisk1s2の部分は変わりますが、これはディスクユーティリティの情報で確認できるのでそれに応じて変更すれば良いと思います。

    参考:http://superuser.com/questions/503759/how-to-run-fsck-on-an-external-drive-with-os-x

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px ‘Source Code Pro’; color: #c1c1c1; background-color: #000000}
    span.s1 {font-variant-ligatures: no-common-ligatures}
    span.s2 {text-decoration: underline ; font-variant-ligatures: no-common-ligatures; color: #34bd26}
    span.s3 {font-variant-ligatures: no-common-ligatures; background-color: #0220b3}
    span.s4 {text-decoration: underline ; font-variant-ligatures: no-common-ligatures}

  • 肥大化したiTunesライブラリを劇的に容量削減する方法

    macとiPhoneを使っていると、App Storeからダウンロードしたアプリがどんどん母艦のiTunesのライブラリに保存されていって、macのストレージを圧迫していることがあります。同期するときのアプリ選択も、数が増えすぎるとやりづらいです。

    過去に一度だけダウンロードしたアプリや、ダウンロードしたけれどいまいちですぐに消してしまったアプリがずっとiTunesライブラリに残り続けているのは無駄なので、削除してしまうことをおすすめします。以下やりかた。
    iTunesのバージョンは12.5.1.21でやってます。

    1. まず、iTunesを起動します。
    2. 左上の再生ボタンの下あたりにあるプルダウンから、「App」を選択。
    3. 「ライブラリ」のリストから「App」を選ぶと、右側にライブラリに保存されているアプリの一覧があります。何年も前にダウンロードしたアプリなんかが、ずらっとでているはず。
    4. 不要なアプリを選択して、右クリック。「削除」を選択
    5. 「選択したAppをライブラリから削除しても良いですか?」という旨のダイアログが出るので、「Appを削除」を選択。
    6. 「選択したAppをゴミ箱に移動しますか?」というダイアログが出るので、容赦なく「ゴミ箱に入れる」を選択。
    7. あとはFinderで通常どおり「ゴミ箱を空に」すればOKです。
    最近ではアプリは一本数百MB以上あることもよくありますし、必要なものはApp Storeから随時ダウンロードすれば良いので、ローカルのipaは特に理由がない限り、マメに整理するのが良さそうですね。
  • Homebrewを使ったpyenvのセットアップ(El Captan+zsh)

    Homebrewを使ったzsh+prezto環境でのpyenvの構築手順メモ。

    1. pyenvのインストール
    $ brew update
    $ brew install pyenv

    2. 環境変数の設定
    .zshrcに以下の行を追加する。Preztoの場合はどこに独自設定を書けばいいんだろうと思ったんだけど、普通に.zshrcに書けばいいらしいからPreztoはあんまり関係なかった。

    if which pyenv > /dev/null; then eval “$(pyenv init -)”; fi

    3. python環境のインストール
    デフォルトで使えるバージョンはsystemのみ。
    追加できるバージョンは以下で確認できる。

    $ pyenv install -l

    で確認したあと、

    $ pyenv install 2.7.12

    みたいにして任意のバージョンをインストールする。 pyenv環境にインストールすみのバージョンは

    $ pyenv versions

    で確認できる。 任意のディレクトリで

    $ pyenv local 2.7.12

    のようにすると、そのディレクトリに.python-versionというファイルが作られ、これが反映されてそのディレクトリ内でpythonコマンドを実行した時だけそのバージョンのPythonで実行されるようになり、ディレクトリを抜けるとglobalなpythonのバージョンに自動で切り替わる。globalなバージョンを変更するときは

    $ pyenv global 2.7.12

    とすると、ローカルに.python-versionがないディレクトリで実行される(globalな)pythonのバージョンを設定できる。

  • pyenv installでエラーになるときの対応

    macOS(正確にはEl Capitan)のpyenvで特定のバージョンのpythonをインストールしようとしたときにエラーになることがありました。曰く:

    $ pyenv install 2.7.12                                                                                                               +[master]Downloading Python-2.7.12.tar.xz…-> https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xzInstalling Python-2.7.12…ERROR: The Python zlib extension was not compiled. Missing the zlib?
    Please consult to the Wiki page to fix the problem.https://github.com/yyuu/pyenv/wiki/Common-build-problems

    調べると、 zlibのヘッダが見つかってないのでCFLAGS環境変数を設定するか、xcode-select –install を実行してXCodeコマンドラインツールを再度設定するとのこと(OSをアップグレードした後とかは必要だそう)。

    今回はxcode-selectのほうを試して正常にインストールできるようになりました。

    $ xcode-select –install   

    として出てくるダイアログ経由でXcodeのコマンドラインツールをインストールしたあと、

    $ pyenv install 2.7.12                                                                                                               +[master]Downloading Python-2.7.12.tar.xz…-> https://www.python.org/ftp/python/2.7.12/Python-2.7.12.tar.xzInstalling Python-2.7.12…Installed Python-2.7.12 to /Users/Kurosawa_Hiroyuki/.pyenv/versions/2.7.12 

    としてインストールが成功するようになりました。