30/09/2018, 20:59

Importlib.import_module không chạy được?

Mình đang sử dụng 2 file script Python cho FontForge(phần mềm tạo và sửa font), có 2 file Python nằm trong AppDataRoamingFontForgepython (để chạy mỗi lần FontForge khởi động), file module là glyphcomponents.py, file còn lại glyphbuilder.py có phần nội dụng thế này:

try:
    glyphcomponents = importlib.import_module("glyphcomponents")
except:
    import_successful = False

Và tuy 2 đó chung thư mục nhưng chạy luôn bị sang nhánh except, mình bỏ glyphcomponents.py vào thư mục cài đặt của FontForge vẫn không được. Xin nhờ mọi người hỗ trợ ạ.

Thành Phạm viết 23:12 ngày 30/09/2018

Bạn thêm thử đoạn này vào trước dòng import xem

import sys; sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
明玉 viết 23:09 ngày 30/09/2018

message ghi là “No module named glyphcomponents”

Thành Phạm viết 23:07 ngày 30/09/2018

Bạn thử thêm dòng này trước đoạn import xem

import sys, os; sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
明玉 viết 23:09 ngày 30/09/2018

bị lỗi tiếp: NameError: global name "__file__" is not defined
Edit: mình mới sắp xếp lại file, bây giờ script đã chạy ok rồi.

Thành Phạm viết 23:12 ngày 30/09/2018

Mình cũng chưa nghịch cái importlib này bao giờ nên chịu sao bạn không dùng:

import glyphcomponents

Mà bạn dùng python nào, 3 hay 2

明玉 viết 23:00 ngày 30/09/2018

FontForge sử dụng Python 2, mà thôi mình copy lại file kia thì được rồi, không hoàn hảo lắm nhưng ok rồi
Edit: mình mới tìm được workaround:

filename = inspect.getframeinfo(inspect.currentframe()).filename
path = os.path.dirname(os.path.abspath(filename))
sys.path.insert(0, path)
Thành Phạm viết 23:01 ngày 30/09/2018

Vậy là bạn insert path vào là được đúng không vấn đề là sao lão __file__ lại bị lỗi nhể mình toàn dùng nó mà giờ bạn bảo lỗi thấy hơi ghê ghê

À, hay bạn chạy thẳng từng dòng một (typing interactive), bạn phải chạy kiểu python test.py thì __file__ mới không lỗi

明玉 viết 23:01 ngày 30/09/2018

Cái __file__ đó mình sửa lại, bỏ trong ngoặc kép thì nó chạy được, nhưng trả về không đúng path

Thành Phạm viết 23:06 ngày 30/09/2018

Chắc của bạn có liên quan đến thằng py2exe rồi chứ mình dùng toàn để không có ngoặc kép thôi

http://www.blog.pythonlibrary.org/2013/10/29/python-101-how-to-find-the-path-of-a-running-script/

明玉 viết 23:00 ngày 30/09/2018

Ừm, có lẽ FontForge chạy script của mình theo kiểu từng dòng một

Bài liên quan
0