Aspose内で例外が発生

内容:
Debian12ベースのDockerイメージ上でxlsファイルを開く際にAspose内で例外が発生して開けない
環境
# cat /etc/os-release
PRETTY_NAME=“Debian GNU/Linux 12 (bookworm)”
NAME=“Debian GNU/Linux”
VERSION_ID=“12”
VERSION=“12 (bookworm)”
VERSION_CODENAME=bookworm
ID=debian
HOME_URL=“https://www.debian.org/
SUPPORT_URL=“Debian -- User Support
BUG_REPORT_URL=“https://bugs.debian.org/

# python -V
Python 3.11.9

手順
1.Dockerfileで「FROM python:3.11」を指定し、Dockerイメージをビルドします。
2.Docker内にログインし、以下をインストールします。
apt install locales-all libicu-dev icu-devtools
pip install aspose-cells aspose-cells-python
※Aspose.Cells 24.6.0がインストールされる

3.以下のコードを配置(aspose_test.py)して実行します。
import aspose.cells
import locale

locale.setlocale(locale.LC_ALL, 'ja_JP.utf8')
current_locale = locale.getlocale()
print(current_locale)

with aspose.cells.Workbook('test.xls') as wb:
    pass

■結果
# python aspose_test.py
Process terminated. Couldn't find a valid ICU package installed on the system. Set the configuration flag System.Globalization.Invariant to true if you want to run with no globalization support.
   at System.Environment.FailFast(System.String)
   at System.Globalization.GlobalizationMode.GetGlobalizationInvariantMode()
   at System.Globalization.GlobalizationMode..cctor()
   at System.Globalization.CultureData.CreateCultureWithInvariantData()
   at System.Globalization.CultureData.get_Invariant()
   at System.Globalization.CultureInfo..cctor()
   at System.StringComparer..cctor()
   at System.StringComparer.get_OrdinalIgnoreCase()
   at System.Text.EncodingTable..cctor()
   at System.Text.EncodingTable.GetCodePageFromName(System.String)
   at System.Text.CodePagesEncodingProvider.GetEncoding(System.String)
   at System.Text.EncodingProvider.GetEncodingFromProvider(System.String)
   at System.Text.Encoding.GetEncoding(System.String)
   at Aspose.WrpGen.Interop.GenericMarshaler..cctor()
   at Aspose.WrpGen.Interop.GenericMarshaler.ToString(Aspose.WrpGen.Interop.PyStringArg*)
   at WrpNs_Aspose.WrpNs_Cells.WrpCs_Workbook_8390C5AB.ctor_002_Workbook(Aspose.WrpGen.Interop.PyStringArg*)
Aborted (core dumped)

4.続いて「export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1」を実行後、再度aspose_test.pyを実行します
# python aspose_test.py
('ja_JP', 'UTF-8')
Traceback (most recent call last):
  File "/home/root/aspose_test.py", line 8, in <module>
    with aspose.cells.Workbook('test.xls') as wb:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Proxy error(CultureNotFoundException): Culture is not supported. (Parameter 'culture')
1041 (0x0411) is an invalid culture identifier.

要望
Debian12のDockerイメージ環境でxlsファイルを開く際のエラー回避方法を教えてください

@s0p86v3z
サンプルファイルを提供してくれませんか。私たちはすぐに検査します。

ご返信ありがとうございます。
添付画像err_form.pngのようになりxlsファイルが添付できないため、
err_form.png (2.7 KB)

test.xlsの画像を添付致します。
test.xls.png (6.0 KB)

よろしくお願い致します。

@s0p86v3z
サンプルファイルをzip形式に圧縮して、ここにアップロードしてください。私たちはすぐに検査します。

ご教授ありがとうございます。
zipファイル添付致しました。
よろしくお願い致します。
test.zip (11.0 KB)

@s0p86v3z
Dockerコンテナでアプリケーションを実行します。コンテナ環境の言語設定がアプリケーションの希望する言語設定と一致していることを確認してください。コンテナとアプリケーションの設定が一致しない場合は、同じ言語に設定して再テストします。

また、pythonインタプリタのlocaleをマシン環境のlocaleに設定するには、次の文を使用します。

locale.setlocale(locale.LC_ALL, '')

ご回答ありがとうございます。

ただ、すでに問い合わせ時のサンプルコードにある通り、日本語ロケールを設定して同じロケールになっていることは確認しています。
image.png (12.1 KB)

@s0p86v3z
もしもLinux上でDockerを使わない場合、上記のコードはエラーなしに実行されるので、私たちはDockerの設定に問題があると考えています。
したがって、設定ファイルをさらに分析したり、こちらにアップロードしたりすることができます。また、Docker内で locale.setlocale(locale.LC_ALL, ‘ja_JP.utf8’) を使用しない場合、エラーが発生しますか?

Dockerfile.zip (11.5 KB)

Docker内で locale.setlocale(locale.LC_ALL, ‘ja_JP.utf8’) を使用しない場合も、エラーは発生します。
また、最小限のDockerfileでエラーを再現できることを確認しましたので添付します。

@s0p86v3z,

docker ファイル、サンプル Excel ファイル、コード スニペットをありがとうございます。

問題の徹底的な評価が必要です。 Aspose.Cells for Python の .NET 経由で docker イメージ上の XLS ファイルを開いたときに、お客様側で例外が発生した理由を調査します。 社内の問題追跡システムで次の新しいチケットを開き、サポート ポリシーに記載されている条件に従って修正を提供します。
問題 ID: CELLSPYTHONNET-208

更新が届き次第、ここでお知らせします。

@s0p86v3z
Aspose.Cells for Python via .NET の実行は .NET Core 3.1 に基づいており、.NET Core 3.1 は特定のバージョンの ICU ライブラリのみを使用できます。新しい Dockerfile を設定し、それが正常に動作するようになりました。参考までに、ありがとうございます。

FROM python:3.11 AS base

ENV APP_PATH=/home/sample
WORKDIR $APP_PATH

COPY aspose_test.py $APP_PATH
COPY test.xls $APP_PATH

# For drawing
RUN apt-get update && apt-get install -y libgdiplus

# Install an older version of ICU
RUN wget http://archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu70_70.1-2_amd64.deb
RUN dpkg -i libicu70_70.1-2_amd64.deb

RUN pip install --proxy=${http_proxy} aspose-cells-python

CMD ["python", "aspose_test.py"]

Hope helps a bit.

こちらでも同環境にて試したところ、正常に動作することを確認できました。
ご対応いただきありがとうございました。

@s0p86v3z
どういたしまして。何か質問があれば、いつでも連絡してください。