質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Cygwin

Cygwinは、Unixのような環境を、Windows上で構築させるコマンドラインインターフェースです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

4359閲覧

cygwinにてエラーが起きる

jazzmaster

総合スコア26

Cygwin

Cygwinは、Unixのような環境を、Windows上で構築させるコマンドラインインターフェースです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/12/22 00:04

編集2021/12/22 08:57

0 [main] python3.8 850 child_info_fork::abort: couldn't allocate memory 0x1A97D0000(0) for
'??\C:\cygwin64\usr\local\lib\python3.8\site-packages\pandas_libs\sparse.cpython-38-x86_64-cygw
in.dll' alignment, Win32 error 87

上記のようなエラーが実行時に出てしまいます。
メモリー不足のような気がし、
regtool -i set /HKLM/Software/Cygwin/heap_chunk_in_mb 1024
regtool -v list /HKLM/Software/Cygwin
このようなことをしてみたのですが、解決できず困っております。
何か解決方法をお教えいただけると幸いです。
よろしくお願いいたします。

実行時のコードは下記です。

python

1import sys 2import re 3import datetime 4import pandas as pd 5import os 6import shutil 7import csv 8import math 9import numpy as np 10from halo import Halo 11 12@Halo(text='Loading', spinner='dots') 13def create(outputfile): 14 with open(outputfile, 'w') as f: 15 16 print("!", file=f) 17 18 19create("test.txt")

import pandas as pdかfrom halo import Haloを削除するとエラーは出なくなります。
(関数内で実際にはdataframeを処理していたりしますが、上記コードでも同様のエラーが出ます)
またこのエラーが出ても出力結果は問題ないです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

itagagaki

2021/12/22 01:18

何を実行時にエラーがでるのですか?
jazzmaster

2021/12/22 02:20

自分で作成したpythonコードです。主にはpandasでdataframeを処理しています。これだけならエラーはでないのですが、haloというライブラリを入れdataframe処理中にスピナーを使用するとエラーが出てきます。
itagagaki

2021/12/22 02:21

そのエラーが出るコードを示してください。
jazzmaster

2021/12/22 03:28

関数の前に@Halo(text='Creating Now!', spinner='dots')を一つのみ入れただけです。
itagagaki

2021/12/22 03:33

エラーメッセージは1行だけですか? 呼び出し履歴は出ていないですか?
itagagaki

2021/12/22 03:34

これは質問への追記・修正の依頼ですので、ここで答えるのではなく質問を編集して追記・修正してください。
jazzmaster

2021/12/22 05:13

すみません、エラーメッセージは、上記に記載した通り、0 [main] python3.8 850 child_info_fork::abort: couldn't allocate memory 0x1A97D0000(0) for '\??\C:\cygwin64\usr\local\lib\python3.8\site-packages\pandas\_libs\sparse.cpython-38-x86_64-cygwin.dll' alignment, Win32 error 87です。
guest

回答1

0

ベストアンサー

回答というかどちらかというとコメントなのですが…

勉強がてらにこちらで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のメモリ配置を重ならないように指定する例が挙げられていますが,
私もちゃんと理解できるいる訳ではありません。

投稿2021/12/22 14:12

編集2021/12/23 13:10
ujimushi_sradjp

総合スコア2152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jazzmaster

2021/12/23 01:50

回答ありがとうございます。dllに依存関係がありその影響と理解いたしました。
jazzmaster

2021/12/24 01:46

追加情報ありがとうございます。 ちなみにrebaseでいじっていたらおかしくなってしまったので、 pandas1.2.2を一度アンインストールし、1.3.5を再インストールしたところ、質問の現象は解消されました。さらに処理が早くなっておりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問