Я создал файл exe
с использованием модуля py2exe
. Странно, что он работает так, как он должен работать, когда я запускаю exe
из командной строки, но когда я дважды щелкаю по этому exe
, он открывает консоль (как это и должно быть), и консоль немедленно закрывается..exe закрывается сразу после запуска при двойном щелчке
Я написал метод logging
, чтобы выяснить, где проблема, и окружил метод try-except
, который не вызывает никаких исключений.
Вот часть моего кода:
if __name__ == '__main__':
try:
mh = moto()
db = database() # you can find __init__ of database() below
log('ok') # I CAN'T FIND THIS LINE IN THE LOG FILE SO THE PROBLEM IS PROBABLY INSIDE __INIT__ OD database()
except Exception as e:
log(str(e))
log(str(traceback.format_exc))
for url in [__CATs__,__hyphens__]:
log(' for url')
инициализации базы данных():
class database():
def __init__(self):
self.conn = sqlite3.connect('db.db') # Database is created
self.cursor = self.conn.cursor()
self.create_table_moto()
self.drop_and_create_temp_table()
log('init_end') # I CAN FIND THIS LINE IN LOG FILE SO THE PROBLEM SHOULD BE AFTER database() initialization but i doubt that because of the log right after database()
Так главное странно то, что __init__
метод базы данных(), вероятно, работает правильно потому что я вижу последнюю строку log('init_end')
в моем файле журнала. Но после этой инициализации устанавливается еще один журнал log('ok')
, который я не вижу в файле журнала, и никаких исключений не было.
ОЧЕНЬ ВАЖНО EDIT:
При создании файла ех с помощью py2exe, он создает папку dist
в папке, где хранятся ваш проект. Файл exe можно запустить с помощью cmd только тогда, когда я в этой родительской папке, поэтому мне нужно написать dist\moto.exe
. moto.exe
или project\dist\moto.exe
не работает. EDIT:
Другая странная вещь:
Я добавил линию: mLib.printToFile('testovaci_txt.txt', 'nieco')
сразу после log('ok')
, который не работает, и это создает файл testovaci_txt.txt
в папке, где хранится «EXE» и другие файлы.
EDIT2: Метод log
находится в моей внешней библиотеке внутри site-packages
. Чтобы выяснить, где log('ok')
сохраняет файл, который я создал, 'log_2 (' ok ')', который создает файл logging-testing.txt
и помещает его сразу после log('ok')
и запускает программу. Затем я искал этот файл в Windows и не смог его найти.
Вы знаете, где может быть проблема?
Задайте свой путь или используйте полный путь с именами файлов. Двойное нажатие запускается в '% windir% \ system32' по умолчанию (возможно, это не то место, где находится ваш файл) – Stephan
@Stephan Странно, что я очень часто использую этот подход, и все работает нормально. Я не могу использовать полный путь, потому что я собираюсь отправить exe моему другу. Итак, как я мог установить свой путь? Спасибо –
Как @Stephan говорит, это, вероятно, связано с путём. Похоже, что «база данных классов» регистрируется на другом пути, чем ваш '__main__'.Вы можете найти другой журнал с этим «ok» в неожиданном пути, если не была выбрана ошибка. – cnluzon