Python 3.6 без имени модуля ... На Windows Server 2008 R2 - PullRequest
0 голосов
/ 03 мая 2018

Я написал небольшой скрипт на Python для выполнения основных задач. На моей локальной машине все отлично работает. Но когда я запускаю Windows Server 2008 R2 , я получаю эту ошибку, выполняя точку входа run.py

Traceback (последний вызов был последним):
Файл "run.py", строка 1, в
Рабочий импорта
Python 3.6 без модуля с именами рабочих

Я действительно не вижу, что я делаю неправильно, все кажется нормальным.

Это моя структура папок

db_utils
entity
files_utils
workers
  __pycache__
  __init__.py
  Worker.py
run.py

Код для run.py:

from workers.Worker import Worker
import time
import os

    while(True):
        try:
            print("Beginning")
            worker = Worker()
            worker.sendEmails()
            print("Execution successfull")
        except Exception as e:
            if hasattr(e, 'message'):
                print(e.message)
            else:
                print("Execution error")        
        finally:
            time.sleep(10)

А код для Worker.py -

from db_utils.DBManager import SessionFactory
import datetime
from datetime import datetime
from entity.Email import Email
from pushs.Emailer import Emailer


class Worker():

    _DATE_FORMAT = '%%Y-%%m-%%d'

    _SIMPLE_DATE_FORMAT = '%Y-%m-%d'

    def getUnsentEmail(self):
        """ Cette fonction retourne la liste des emails qui n'ont pas encore été envoyés"""

        sessionFactory = SessionFactory()
        session = sessionFactory.Session()

        emails = []

        connection = sessionFactory.getConnection()
        query = "select *  from post_email where statut = 'PENDING' "

        result = connection.execute(query)
        for row in result:            
            tmpElt = Email(row)
            emails.append(tmpElt)

        #à ce niveau on a tous les mails qui n'ont pas encore étés envoyés    
        #
        session.close()

        return emails


    def sendEmails(self):

        emails = self.getUnsentEmail()

        sessionFactory = SessionFactory()
        session = sessionFactory.Session()                           
        connection = sessionFactory.getConnection()



        for email in emails:
            emailer = Emailer()
            result = emailer.sendEmail(email)

            #si le résultat est False le mail n'a pas été envoyé
            if result.get("result") is False:                
                currentDateTime = datetime.today().strftime('%Y-%m-%d %H:%M:%S')
                print(currentDateTime)
                query = "update emails set statut = 'PENDING', last_execution_date = str_to_date('"+currentDateTime+"', '%%Y-%%m-%%d %%H:%%i:%%s'), last_execution_message = '"+result.get('message')+"' ,last_execution_result = 'NOK' where id = "+str(email.id)
                connection.execute(query)
            else:
                currentDateTime = datetime.today().strftime('%Y-%m-%d %H:%M:%S')
                print(currentDateTime)
                query = "update emails set statut = 'DONE', last_execution_date = str_to_date('"+currentDateTime+"', '%%Y-%%m-%%d %%H:%%i:%%s'), last_execution_message = '"+result.get('message')+"' ,last_execution_result = 'OK' where id = "+str(email.id)
                connection.execute(query)

        session.close()

Ил также обнаружил, что проблема связана не только с этим приложением, но все скрипты Python, которые у меня есть на этом сервере, ведут себя одинаково.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Наконец-то я решил проблему, удалив и переустановив python на сервере.

0 голосов
/ 03 мая 2018

Вам необходимо предоставить больше данных трассировки. Кроме того, вам может понадобиться разместить содержимое init .py в рабочем каталоге. Я могу заставить ваш код нормально работать на моей машине с Windows.

Есть две вещи, которые могут быть источником вашей ошибки:

  1. Ваш оператор импорта в init .py должен выглядеть как

    import workers.Worker
    
  2. Возможно, при запуске вашего скрипта (run.py) каталог по умолчанию - C: \ Windows. Если вы запускаете его из ярлыка, убедитесь, что в свойствах вы правильно установили каталог «Начать с:». Вы можете заставить Python сообщить вам, в каком каталоге он работает, с помощью os.getcwd () (что означает «получить текущий рабочий каталог» из модуля os). Попробуйте добавить эти строки в самый верх файла run.py (ДО "import worker.Worker import Worker"), чтобы помочь отладке: импорт ОС печать (os.getcwd ()) Это напечатает текущий рабочий директор в консоли.

...