ImportError: нет модуля с именем psycopg2.extensions при запуске моего кода в облаке DataFlow - PullRequest
0 голосов
/ 21 сентября 2018

Привет! Я пытаюсь запустить код своего облачного потока данных из облачной оболочки. Я подаю в суд на следующий код

 from __future__ import absolute_import
import argparse
import logging
import apache_beam as beam
from apache_beam.io import ReadFromText
from apache_beam.io import WriteToText
from apache_beam.options.pipeline_options import PipelineOptions
import csv
import psycopg2
from io import StringIO
import argparse
import logging
import sys
import re
import csv
conn = psycopg2.connect("dbname='db_bio' user='postgres' host='*****' port='5432' password='poui19956'") 

class scrip_val(beam.DoFn):
    def process(self, element):
        f = StringIO(element)
        print(type(f))
        reader = csv.reader(f, delimiter=',')
        for row in reader:
            cur.execute("insert into bio values(%s,%s,%s,%s,%s)",row)
            conn.commit()
        return [len(element)]
def run():
    parser = argparse.ArgumentParser()
    parser.add_argument('--input',
                        dest='input',
                        default='gs://pydataflow',
                        help='Input file to process.')

    known_args, pipeline_args = parser.parse_known_args()

    with beam.Pipeline(options=PipelineOptions(pipeline_args)) as p:
        lines = p | 'read' >> ReadFromText(known_args.input)
        (lines
        | 'words'>> beam.ParDo(scrip_val())
        )
if __name__ == '__main__':
    logging.getLogger().setLevel(logging.INFO)
    run()`

Но когда я пытаюсь запустить этот код из облачной оболочки с помощью этой команды

python -m  bulksumlog --input [Bucket_location]  --runner DataflowRunner --project [Project_id] --temp_locat
ion [temo_Bucket_location] --save_main_session True

Я получаю следующую ошибку

 return dill.load_session(file_path)
  File "/usr/local/lib/python2.7/dist-packages/dill/_dill.py", line 402, in load_session
    module = unpickler.load()
  File "/usr/lib/python2.7/pickle.py", line 864, in load
    dispatch[key](self)
  File "/usr/lib/python2.7/pickle.py", line 1096, in load_global
    klass = self.find_class(module, name)
  File "/usr/local/lib/python2.7/dist-packages/dill/_dill.py", line 465, in find_class
    return StockUnpickler.find_class(self, module, name)
  File "/usr/lib/python2.7/pickle.py", line 1130, in find_class
    __import__(module)
ImportError: No module named psycopg2.extensions

Я установил всю библиотеку python, связанную с psycopg2. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 21 сентября 2018

Попробуйте установить модуль psycopg2 на вашем сервере

Установка Сборка Для установки Psycopg необходимо выполнить несколько предварительных условий (компилятор C, некоторые пакеты разработки): пожалуйста, проверьте документы по установке и faq в doc dir или онлайн дляподробности.

Если предварительные условия выполнены, вы можете установить psycopg, как и любой другой пакет Python, используя pip для его загрузки из PyPI:

$ pip install psycopg2 

или используя setup.py, если вы загрузилилокальный исходный пакет:

 $ python setup.py build
 $ sudo python setup.py install

Вы также можете получить автономный пакет, не требующий компилятора или внешних библиотек, установив двоичный пакет psycopg2 из PyPI:

 $ pip install psycopg2-binary

Бинарный пакет является практическим выбором для разработки и тестирования, но в производстве рекомендуется использовать пакет, созданный из исходных кодов.

Если вы используете python 3.x, значит изменить

pip to pip3
...