0%

macOS Catalina (10.15.1) に上げたらpyenv install x.x.xができなくなった

エラー出たンゴ…

python3.8を入れたかっただけなのです…
バージョンに関わらずインストールできなくなってた

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
❯ pyenv install 3.8.0
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.8.0.tar.xz...
-> https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tar.xz
Installing Python-3.8.0...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk

BUILD FAILED (OS X 10.15.1 using python-build 20180424)

Inspect or clean up the working tree at /var/folders/4f/xp5nrk812wx6730bfkytvwyw0000gn/T/python-build.20191107221215.27174
Results logged to /var/folders/4f/xp5nrk812wx6730bfkytvwyw0000gn/T/python-build.20191107221215.27174.log

Last 10 log lines:
"__PyRuntime", referenced from:
_check_preinit_isolated_config in _testembed.o
"__Py_Dealloc", referenced from:
_test_open_code_hook in _testembed.o
__audit_hook_run in _testembed.o
"__Py_InitializeMain", referenced from:
_test_init_main in _testembed.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Programs/_testembed] Error 1

乗ってた

ググれとあれほど…

Common build problems · pyenv/pyenv Wiki · GitHub

乗っていたとおりにbrew remove binutilsをしたらインストールできました。

残った疑問

StackOverFlowに投げていたのですが
python - pyenv install 3.8.0でエラーが出ます。 - スタック・オーバーフロー

which pyenv

1
2
3
4
5
6
7
8
9
10
11
12
pyenv () {
local command
command="${1:-}"
if [ "$#" -gt 0 ]
then
shift
fi
case "$command" in
(rehash | shell) eval "$(pyenv "sh-$command" "$@")" ;;
(*) command pyenv "$command" "$@" ;;
esac
}

なぜなのだ…

追記

リンク先のStackOverFlowで教えていただけました。
pyenvは導入後シェル関数へと変わるのでwhich値はこれで良いらしい。
知らんなんだ。ありがとうございました。

07の内容が薄かったので一気にやります。

06. 集合

“paraparaparadise”と”paragraph”に含まれる文字bi-gramの集合を,それぞれ, XとYとして求め,XとYの和集合,積集合,差集合を求めよ.さらに,’se’というbi-gramがXおよびYに含まれるかどうかを調べよ.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
pub fn ngram(seq: &str) -> Vec<&str> {
// char bigram
let mut vec: Vec<&str> = Vec::new();
seq.to_string().retain(|c| c != ' ');
for i in 0..(seq.len() - 1) {
vec.push(&seq[i..(i+2)]);
}
return vec
}

use std::collections::HashSet;

pub fn problem06() {
let x: HashSet<&str> = ngram("paraparaparadise").into_iter().collect();
let y: HashSet<&str> = ngram("paragraph").into_iter().collect();

let union: Vec<_> = x.union(&y).collect();
let intersection: Vec<_> = x.intersection(&y).collect();
let difference: Vec<_> = x.difference(&y).collect();

println!("union: {:?}\nintersection: {:?}\ndifference: {:?}\n", union, intersection, difference);

let x_bool = x.contains(&"se");
let y_bool = y.contains(&"se");

println!("'se' in X: {:?}\n'se' in Y: {:?}\n", x_bool, y_bool);
}

Rustで集合を扱うときにはHashMapが役に立つという知見を得た。ここは後で別に書きたい。
05と同様に文字bi-gram の Vector を作ってから HashMap に打ち込んでいく👊
これができたらあとは HashMap のドキュメントを洗うだけ。

let続きになってしまってクソコード感が否めない。

07. テンプレートによる文生成

引数x, y, zを受け取り「x時のyはz」という文字列を返す関数を実装せよ.さらに,x=12, y=”気温”, z=22.4として,実行結果を確認せよ.

ただ引数を文にして返すだけ(ですよね?)

1
2
3
4
5
6
7
8
pub fn problem07(x: i32, y: &str, z:f32) -> String {
let _x = x.to_string();
let _y = &y.to_string();
let _z = z.to_string();
let s = _x + "時の" + _y + "は" + &_z;
println!("{:?}", s);
return s;
}

python でいう "hoge {} hoge {}".format(a, b) みたいな書き方がしたかったけどうまいやり方が見つけられなかった。
流石にありそうだけど。

今度は Open MPI を Mac で使えるようにする

https://stackoverflow.com/a/42780322

はい。

やっていく

バージョンはここcurrent stable release downloadsから。

なのでコマンドのバージョンは適宜読み替えてもらって。

1
2
3
4
5
6
7
$ cd ~/Downloads
$ curl -O https://download.open-mpi.org/release/open-mpi/v2.0/openmpi-2.0.4.tar.gz
$ tar xf openmpi-2.0.4.tar.gz
$ cd openmpi-2.0.4/
$ ./configure --prefix=$HOME/opt/usr/local
$ make all
$ make install

ここまででインストールは完了。$HOME/opt/usr/local/bin/mpirun --versionでエラーじゃなければOK。

ビルドに死ぬほど時間かかりました。まんじ。

パスを通す

このままだと使いにくすぎるのでパスを通す。

1
$ vi ~/.zshrc

1
export PATH="$HOME/opt/usr/local/bin/:$PATH"

を追加して終わり!

mpiccとかmpirunがどこでも行ければOK

大学の課題で用になった。

Dockerでローカルファイルとつないでやってたけど毎回立ち上げるのがめんどくさすぎたので「流石になんかあるやろ」と思って調べたらあったので備忘録。

環境確認

1
2
3
4
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.6
BuildVersion: 18G95
1
2
3
4
5
6
7
8
9
10
$ system_profiler SPHardwareDataType
Hardware:
Hardware Overview:
Processor Name: Intel Core i5
Processor Speed: 1.4 GHz
Number of Processors: 1
Total Number of Cores: 4
L2 Cache (per Core): 256 KB
L3 Cache: 6 MB
Hyper-Threading Technology: Enabled

(一部抜粋)

1
2
3
4
5
6
$ gcc -v
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1
Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

https://stackoverflow.com/a/29109926

いました。やってる人。

上の引用ですが、彼は gcc-8 fopenmp hello.c でやってるんですが、僕の環境で brew info gccしたところ、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ brew info gcc   
gcc: stable 9.2.0 (bottled), HEAD
GNU compiler collection
https://gcc.gnu.org/
/usr/local/Cellar/gcc/9.2.0 (1,462 files, 291.4MB) *
Poured from bottle on 2019-08-17 at 01:37:25
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/gcc.rb
==> Dependencies
Required: gmp ✔, isl ✔, libmpc ✔, mpfr ✔
==> Options
--HEAD
Install HEAD version
==> Analytics
install: 84,658 (30 days), 221,853 (90 days), 939,760 (365 days)
install_on_request: 38,509 (30 days), 100,681 (90 days), 444,573 (365 days)
build_error: 0 (30 days)

らしくて、バージョン9.xなので、gcc-9 -fopenmp hello.c でイケるやろ!w で行けました。

結論として、

1
$ gcc-9 -openmp <file name>

でできます。

alias貼ってもいいけど別にそんなに長くないしいいや。

NLP100をRustで #05

  1. n-gram
    与えられたシーケンス(文字列やリストなど)からn-gramを作る関数を作成せよ.この関数を用い,”I am an NLPer”という文から単語bi-gram,文字bi-gramを得よ.
続きを読む »