Проблема со сценарием запуска GCP Python3

Я использовал сценарии запуска в экземплярах Google Cloud Compute:

setsid python home/junaid_athar/pull.py

И я могу без проблем запустить следующий скрипт на виртуальной машине при входе в корневой каталог:

setsid python3 home/junaid_athar/btfx.py

однако, когда я добавляю settingsid python3 home/junaid_athar/btfx.py в сценарий запуска, он выдает ошибку:

ImportError: cannot import name 'opentype'

Тот же скрипт работает нормально, когда я вхожу в систему, но не когда я запускаю его как сценарий запуска, почему и как мне его решить?

Обновление: я новичок в программировании и взломал. Вот сценарий:

import logging
import time
import sys
import json
from btfxwss import BtfxWss
from google.cloud import bigquery

log = logging.getLogger(__name__)

fh = logging.FileHandler('/home/junaid_athar/test.log')
fh.setLevel(logging.CRITICAL)
sh = logging.StreamHandler(sys.stdout)
sh.setLevel(logging.CRITICAL)

log.addHandler(sh)
log.addHandler(fh)
    logging.basicConfig(level=logging.DEBUG, handlers=[fh, sh])

def stream_data(dataset_id, table_id, json_data):
    bigquery_client = bigquery.Client()
    dataset_ref = bigquery_client.dataset(dataset_id)
    table_ref = dataset_ref.table(table_id)
    data = json.loads(json_data)

# Get the table from the API so that the schema is available.
table = bigquery_client.get_table(table_ref)

rows = [data]
errors = bigquery_client.create_rows(table, rows)

wss=BtfxWss()
wss.start()

while not wss.conn.connected.is_set():
    time.sleep(2)

# Subscribe to some channels
wss.subscribe_to_trades('BTCUSD')

# Do something else
t = time.time()
while time.time() - t < 5:
    pass

# Accessing data stored in BtfxWss:
trades_q = wss.trades('BTCUSD')  # returns a Queue object for the pair.
while True:
    while not trades_q.empty():
        item=trades_q.get()
        if item[0][0]=='te':
            json_data={'SEQ':item[0][0], 'ID':item[0][1][0], 'TIMESTAMP':int(str(item[0][1][1])[:10]) , 'PRICE':item[0][1][3], 'AMOUNT':item[0][1][2], 'UNIQUE_TS':item[0][1][1], 'SOURCE':'bitfinex'}
            stream_data('gdax','btfxwss', json.dumps(json_data))
# Unsubscribing from channels:
wss.unsubscribe_from_trades('BTCUSD')

# Shutting down the client:
wss.stop()

Я запускаю его на стандартной машине с 1 процессором 3,75 памяти. (Debian GNU/Linux 9 (расширенная версия)).

Я ДУМАЮ, что проблема связана с каталогом установки python3 и модулей, а также с разницей между запуском сценариев запуска и входом в систему - как мне устранить эту проблему?


person Junaid ATHAR    schedule 08.01.2018    source источник
comment
Можете ли вы предоставить скрипт Python, который вы пытаетесь запустить? Кроме того, предоставьте подробную информацию об образе загрузочного диска/ОС и версии Python, которые вы используете в экземпляре GCE.   -  person N Singh    schedule 09.01.2018
comment
Добавил правку в основную тему со скриптом.   -  person Junaid ATHAR    schedule 10.01.2018
comment
Попробуйте записать sys.path в файл журнала, чтобы увидеть разницу. В идеале вы должны выполнять сценарии внутри виртуальной среды, чтобы избежать подобных проблем.   -  person andyhasit    schedule 10.01.2018


Ответы (1)


Разобрался в чем дело. Сценарии запуска запускаются как (на?) корень. Я добавил -u username в начало сценария запуска, и он запустился, как если бы я подключился к серверу по SSH. Все хорошо, всем спасибо за помощь!

person Junaid ATHAR    schedule 10.01.2018