How to use bash and python mixed for web scraping

次の結果、pythonスクリプトが実行されない問題の解決策について質問です。

AttributeError: module
‘importlib._bootstrap_external’ has no
attribute ‘_w_long’

OS 環境については、Ubuntu 20.04.2LTS を使用しています。

  • Ubuntu が提供する LibreOffice
    では期待する正常な動作をしました
  • Base を使用するため LibreOffice.org より
    ver.7.0.6 をインストールすると問題が発生しました
  • LibreOffice.org が提供する ver.6.4.7.2
    にダウングレードしても問題が発生しました
  • Ubuntu が提供する ver.6.4.7.2
    をインストールすると期待する正常な動作をしました

パッケージを削除して

sudo apt install libreoffice

をすることで、期待される正常な動作をして、Base も使用できるようになりました。が、ふに落ちません。

Web スクレイピングをするために次のように マクロから bash スクリプトを実行しています。

Shell(csnyaa, 4, "-i " + sText , True)

bash スクリプト内で python スクリプトを実行しているのですが、次のエラーが出力されているようです。

Traceback (most recent call last):   File "/home/*/ドキュメント/*/sbin/curl.py", line 8, in <module>
    from selenium.webdriver import Chrome, ChromeOptions   File "/home/*/.local/lib/python3.8/site-packages/selenium/webdriver/__init__.py", line 18, in <module>
    from .firefox.webdriver import WebDriver as Firefox  # noqa   File "/home/*/.local/lib/python3.8/site-packages/selenium/webdriver/firefox/webdriver.py", line 29, in <module>
    from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver   File "/home/*/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 26, in <module>
    from .webelement import WebElement   File "/home/*/.local/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py", line 21, in <module>
    import pkgutil   File "/opt/libreoffice7.0/program/python-core-3.7.10/lib/pkgutil.py", line 5, in <module>
    import importlib   File "/opt/libreoffice7.0/program/python-core-3.7.10/lib/importlib/__init__.py", line 51, in <module>
    _w_long = _bootstrap_external._w_long AttributeError: module 'importlib._bootstrap_external' has no attribute '_w_long'

わたしが最新版の ver.7 を使用するにはどうすればよいのでしょうか?

3つの解決方法があったので、投稿しておきます。

  1. 質問でもあげたとおり、sudo apt install libreoffice する
  2. sudo apt remove libobasis7.0-pyuno する
  3. bashスクリプト内でpython3 -E でオプションつけて実行する

1は最新版のLibreoffice を使用しないという問題点がありますが、
マクロに python を使用できて、モジュールも活用できます。

2 は質問の問題を解決できますが、弊害としてマクロで python を使用できないという
問題が残ります

3 はよくわかりませんが使えます。
ただし、マクロで python を使用した場合、モジュールを有効に活用できない問題があります。

考えているうちに、中の人の仲が悪いのではないのかという大人の事情の相互関係がふと頭をよぎりましたとさ…

この質問ですが、LibreOfficeのPythonマクロの話ですよね?
ただのPythonスクリプトの話ではないですよね?LibreOfficeのPythonマクロの話でなければ別の場所でお願いします。

考えているうちに、中の人の仲が悪いのではないのかという大人の事情の相互関係がふと頭をよぎりましたとさ…

それは違いますね。Ubuntuのパッケージは、Debianでパッケージングしたものを持ってきていると思いますが(Ubuntuの事情は知らない)、 DebianのメンテナはReneさんはLibreOfficeの人です。なぜ2つ違うのかと言うとパッケージングポリシーの違いです。

debian版はOSに組み込まれるものでFHSの配置に従う必要があることに対して、TDF版は外部提供なので/opt以下に置く必要があります。

さて、エラーを見るとこんな行があります。

from selenium.webdriver import Chrome, ChromeOptions File “/home/*/.local/lib/python3.8/site-packages/selenium/webdriver/init.py”, line 18, in

/home/*/.local/lib/python3.8/site-packages/selenium/webdriver/__init__.pyってありますか?ないですよね?

これ、パスの参照方法が間違っているのではないでしょうか?

仮にLibreOfficeのPythonマクロの話であれば、debパッケージ版ではFHSに合わせてあるのでシステムのPythonを参照して、たまたまうまく動いただけで、TDF版のパッケージなら/opt/libreoffice7.1/program/python-core-3.8.8/lib(7.1の場合)を使いますし、そこにはseleniumは無いのでエラーになったのだと思います。