前提
下記記事を参考にOracle Linux 8にApache Airflowをインストールしています。
https://dev.classmethod.jp/articles/trying-apache-airflow-quick-start-docker/
また、ホスト機にOracle CloudのPythonSDKをインストールしています。
PythonSDKをDAGで実行するプログラムを作成したところ以下のエラーメッセージが発生しました。
Broken DAG: [/opt/airflow/dags/test_dag.py] Traceback (most recent call last): File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/opt/airflow/dags/test_dag.py", line 9, in <module> import oci ModuleNotFoundError: No module named 'oci'
実現したいこと
DAGで作成したプログラムでPythonSDKを使えるようにしたい
(またはociモジュールをインポートできるようにしたい)
発生している問題・エラーメッセージ
Broken DAG: [/opt/airflow/dags/test_dag.py] Traceback (most recent call last): File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/opt/airflow/dags/test_dag.py", line 9, in <module> import oci ModuleNotFoundError: No module named 'oci'
該当のソースコード
python
1from datetime import datetime, timedelta 2from airflow import DAG 3from airflow.utils.dates import days_ago 4from airflow.operators.bash import BashOperator 5from airflow.operators.python import PythonOperator 6import os 7import sys 8sys.path.append('/usr/lib/python3.6/site-packages/oci') 9import oci 10 11default_args = { 12 'owner': 'airflow', 13 'depends_on_past': False, 14 'start_date': days_ago(0), 15} 16 17with DAG( 18 'test_dag', 19 default_args=default_args, 20 description='Test DAG', 21 schedule_interval=None, 22 catchup=False, 23) as dag: 24 t1 = BashOperator( 25 task_id='print_date', 26 bash_command='date', 27 ) 28 29 def object_storage_list(**kwargs): 30 config = oci.config.from_file( 31 "~/.oci/config",) 32 identity = oci.identity.IdentityClient(config) 33 object_storage_client = oci.object_storage.ObjectStorageClient(config) 34 35 namespace_name="*******" 36 bucket_name="******" 37 get_object_list = object_storage_client.list_objects(namespace_name,bucket_name) 38 return get_object_list.data 39 40 run_this = PythonOperator( 41 task_id = 'object_list', 42 python_callable=object_storage_list, 43 ) 44 45t1 >> run_this
試したこと
- ociのパスが読めにいけないと思い、sys.path.appendで明示的にociモジュールのパスを追加したがエラーのまま
import sys sys.path.append('/usr/lib/python3.6/site-packages/oci') import oci
- docker環境上(root_airflow-webserver_1 , root_airflow-worker_1)にもPytonSDKをインストールし、対話モードでociをインポート出来ることを確認したが、エラーのまま
[root@airflow ~]# docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------------------------- root_airflow-init_1 /usr/bin/dumb-init -- /ent ... Exit 0 root_airflow-scheduler_1 /usr/bin/dumb-init -- /ent ... Up (unhealthy) 8080/tcp root_airflow-webserver_1 /usr/bin/dumb-init -- /ent ... Up (healthy) 0.0.0.0:8080->8080/tcp,:::8080->8080/tcp root_airflow-worker_1 /usr/bin/dumb-init -- /ent ... Up (unhealthy) 8080/tcp root_flower_1 /usr/bin/dumb-init -- /ent ... Up (healthy) 0.0.0.0:5555->5555/tcp,:::5555->5555/tcp, 8080/tcp root_postgres_1 docker-entrypoint.sh postgres Up (healthy) 5432/tcp root_redis_1 docker-entrypoint.sh redis ... Up (healthy) 0.0.0.0:6379->6379/tcp,:::6379->6379/tcp
補足情報(FW/ツールのバージョンなど)
ホストOS:Oracle Linux Server 8.6
Apache Airflow:v2.1.0

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。