回答というかどちらかというとコメントなのですが…
勉強がてらにこちらで1年ほど使っていなかった家のPCのcygwin環境を
最新にアップデートして環境構築して実行するとうまくいきました。
このことから推測されるのは,cygwinのバージョンの更新等で
pandas
をインストールした時と違うバージョンのcygwin1.dll
となって,
その間のリンクが不安定になっているのが一因ではないか,ということです。
参考にこちらのcygwinのシェル上でldd
コマンドを実行した結果を示します。
いくつかのcygwin関係のdllとリンクしていることが分かります。
sh
1$ cd /usr/local/lib/python3.8/site-packages/pandas/_libs
2$ ldd ./sparse.cpython-38-x86_64-cygwin.dll
3 ntdll.dll => /cygdrive/c/WINDOWS/SYSTEM32/ntdll.dll (0x7fffebf50000)
4 KERNEL32.DLL => /cygdrive/c/WINDOWS/System32/KERNEL32.DLL (0x7fffeb0d0000)
5 KERNELBASE.dll => /cygdrive/c/WINDOWS/System32/KERNELBASE.dll (0x7fffe9cc0000)
6 apphelp.dll => /cygdrive/c/WINDOWS/SYSTEM32/apphelp.dll (0x7fffe6f00000)
7 msvcrt.dll => /cygdrive/c/WINDOWS/System32/msvcrt.dll (0x7fffeb030000)
8 cygwin1.dll => /usr/bin/cygwin1.dll (0x180040000)
9 libpython3.8.dll => /usr/bin/libpython3.8.dll (0x3b7ab0000)
10 cygintl-8.dll => /usr/bin/cygintl-8.dll (0x3c5b00000)
11 cyggcc_s-seh-1.dll => /usr/bin/cyggcc_s-seh-1.dll (0x3ddaa0000)
12 cygiconv-2.dll => /usr/bin/cygiconv-2.dll (0x3d9e10000)
13 advapi32.dll => /cygdrive/c/WINDOWS/System32/advapi32.dll (0x7fffea050000)
14 sechost.dll => /cygdrive/c/WINDOWS/System32/sechost.dll (0x7fffebc30000)
15 RPCRT4.dll => /cygdrive/c/WINDOWS/System32/RPCRT4.dll (0x7fffebd10000)
16 CRYPTBASE.DLL => /cygdrive/c/WINDOWS/SYSTEM32/CRYPTBASE.DLL (0x7fffe8e70000)
17 bcryptPrimitives.dll => /cygdrive/c/WINDOWS/System32/bcryptPrimitives.dll (0x7fffe9b20000)
余計なお世話だと思いますが,参考にこちらでの環境構築手順をのせておきます。
環境構築手順
cygwinのアップデート
- 最新の
setup-x86_64.exe
を実行すると最新にアップデートされる旨表示がでるので,そのまま実行
python 3.8とnumpyのインストール
意図的に次の2つのパッケージをインストール
- python38-devel (3.8.1.2-1)
- python38-numpy (1.21.4-1)
この時にnumpyに関連したパッケージがインストールされる。
何故numpy
だけcygwinパッケージのものをインストールするかというと,
numpy
をpipでインストールする場合にcygwinのfortranライブラリ等依存関係を解決する等の手順がかなり
複雑であるため,cygwinパッケージのものを使った方が間違いが少ないため。
python38-devel
はpipでインストール時ビルドに必要なpython
関連の
ヘッダファイル等がインストールされる。
主要なpython関連のcygwinパッケージ(元々3.6が入っていたのでアップデート)
- python38 (3.8.1.2-1)
- python38-pip (21.3.1-1)
- python38-setuptools(59.5.0-1)
pandasのインストール
gcc等のビルド用ツールは過去にインストール済みだったのでおもむろにpipでイントールします。
- cygwinのターミナルを実行
pip3 install pandas
でインストール
(過去の遺物のpython 2系がまだcygwin上に残っているのでここではpip3
を使っています)
- gcc等を使いビルドされるので1時間弱待つ
haloのインストール
- cygwinのターミナル上から
pip3 install halo
2021/12/23 22:00調べた情報の追加
ベストアンサー選んでいただいた後で申し訳ありませんが後で分かった内容を追加しておきます。
cygwin上アプリのヒープサイズの変更方法について
cygwin公式サイトのヒープサイズ変更方法によると,
peflags
コマンドでcygwinが使うヒープサイズを変更できるようです。
64bit版cygwinの場合は最大2048MBだとか。「0」で設定されている場合はデフォルトの512MBだそうです。
数字の単位は「MB」だそうです。
bash
1peflags --cygwin-heap=2048 /bin/python
2# 上と同じ
3peflags -z2048 /bin/python
cygwin1.dllとリンクしているプログラムのエラーについて
今回の質問とよく似ているエラーがちょくちょくネットで報告されているようです。
少し前の例ですが,https://tech.guitarrapc.com/entry/2014/01/31/071034のような
例もあるようです。
cygwin1.dll
でメモリをたくさん確保するので,アドレスがかぶってメモリが確保できないことがあるようです。
この中の対策の一つとしてrebase
コマンドを使ってdllのメモリ配置を重ならないように指定する例が挙げられていますが,
私もちゃんと理解できるいる訳ではありません。