Nó bao gồm một số tập lệnh dòng lệnh - được xác định trong phần thiết lập. py [tôi biết, lỗi thời] như vậy
scripts = ['adios_db_init = adios_db.scripts.db_initialize:init_db_cmd',
...
'adios_db_process_json = adios_db.scripts.process_json:run_through',
]
# and then, in the setup call:
...
entry_points={'console_scripts': scripts}
Điều này đã hoạt động tốt trong suốt một vài năm cập nhật Python và setuptools
Nhưng bỗng nhiên hôm nay [ Trăn 3. 9. 12, công cụ thiết lập 63. 2. 0], tôi nhận được khi cố chạy tập lệnh
$ adios_db_process_json ./
Traceback [most recent call last]:
File "/Users/chris.barker/miniconda3/envs/adios_db/bin/adios_db_process_json", line 33, in
sys.exit[load_entry_point['adios-db', 'console_scripts', 'adios_db_process_json'][]]
File "/Users/chris.barker/miniconda3/envs/adios_db/bin/adios_db_process_json", line 22, in importlib_load_entry_point
for entry_point in distribution[dist_name].entry_points
File "/Users/chris.barker/miniconda3/envs/adios_db/lib/python3.9/importlib/metadata.py", line 542, in distribution
return Distribution.from_name[distribution_name]
File "/Users/chris.barker/miniconda3/envs/adios_db/lib/python3.9/importlib/metadata.py", line 196, in from_name
raise PackageNotFoundError[name]
importlib.metadata.PackageNotFoundError: adios-db
WTF?
Tôi biết rằng trong nhiều năm, hệ sinh thái đã muốn sử dụng dấu gạch ngang, thay vì dấu gạch dưới, cho một số loại đặt tên gói [phân phối] được chuẩn hóa. Tôi KHÔNG BAO GIỜ hiểu điều đó - bạn không thể có dấu gạch nối trong tên gói có thể nhập - tại sao bạn lại muốn có một dấu gạch nối trong tên trong PyPi?
Dù sao đi nữa, tôi có thể thấy việc thay thế dấu gạch ngang bằng dấu gạch dưới một cách tự động, nhưng tại sao nó lại diễn ra theo cách khác?
VÌ THẾ
Tôi làm cách nào để khắc phục sự cố này?
[Tôi thú nhận là tôi đã tìm hiểu khá nhiều trên Google nhưng chưa xem các tài liệu hiện tại và chưa cập nhật các phương pháp hay nhất mới nhất – nhưng tôiTại sao điều này lại xảy ra?
Cuối cùng. Bước tiếp theo của tôi là cài đặt lại mọi thứ từ đầu và xem liệu đây có phải là một kết quả kỳ lạ nào đó vô tình được đưa vào bởi một số bản cập nhật ngoài hệ thống hay không – nhưng nó thực sự, thực sự kỳ lạ
Các phiên bản gạch nối và gạch dưới của tên đề cập đến cùng một gói, vì chúng có cùng tên được chuẩn hóa
Đây là mối quan tâm của tôi - tên có dấu gạch nối không phải là dấu hiệu nhận dạng trăn hợp pháp. Vì vậy, nó không thể là tên "gói" - ít nhất là trong định nghĩa của "gói python" - nó có thể [và rõ ràng là chính thức] là tên "phân phối" - trong đó "phân phối" là thứ mà người ta cài đặt [thường là từ PyPi
Sự khác biệt này đặc biệt rõ ràng với “mọi thứ” [không chắc nên sử dụng từ nào] với các tên phân biệt rõ ràng cho bản phân phối và gói python – e. g
pip install beautifulsoup4
sau đó
import bs4
và trên thực tế, vì một bản phân phối có thể cài đặt nhiều hơn một gói python, đây là một điểm khác biệt khá quan trọng
Tất cả điều này là phần giới thiệu về ý tưởng rằng trong khi tôi vẫn còn bối rối về lý do tại sao bất kỳ tên chuẩn hóa nào cũng sẽ bao gồm dấu gạch dưới - điều cực kỳ quan trọng là tên gói python không bao gồm chúng - vậy tại sao trình bao bọc tập lệnh [hoặc đặc tả] lại sử dụng chúng ??
Một lần nữa, đây có thể là lỗi do thứ gì đó không đồng bộ trong cài đặt của tôi – và tôi sẽ điều tra vấn đề đó ngay bây giờ – nhưng nếu không – đây là vấn đề cần đưa ra khi phát triển công cụ thiết lập, đúng không?
Mô-đun dictools chứa một danh sách không đầy đủ các chuỗi ngôn ngữ có sẵn có thể được sử dụng để khởi tạo các đối tượng Dấu gạch nối như minh họa ở trên
>>> from hyphen import dictools >>> dictools.LANGUAGES ['af_ZA', 'an_ES', 'ar', 'be_BY', 'bg_BG', 'bn_BD', 'br_FR', 'ca', 'cs_C Z', 'da_DK', 'de', 'el_GR', 'en', 'es_ES', 'et_EE', 'fr_FR', 'gd_GB', 'gl', 'gu_ IN', 'he_IL', 'hi_IN', 'hr_HR', 'hu_HU', 'it_IT', 'ku_TR', 'lt_LT', 'lv_LV', 'ne _NP', 'nl_NL', 'no', 'oc_FR', 'pl_PL', 'prj', 'pt_BR', 'pt_PT', 'ro', 'ru_RU', ' si_LK', 'sk_SK', 'sl_SI', 'sr', 'sv_SE', 'sw_TZ', 'te_IN', 'th_TH', 'uk_UA', 'zu _ZA']
Các tệp từ điển đã tải xuống được lưu trữ trong một thư mục dữ liệu cục bộ, cùng với một từ điển. json liệt kê các tệp đã tải xuống và các ngôn ngữ được liên kết
$ ls ~/.local/share/pyhyphen dictionaries.json hyph_de_DE.dic hyph_en_US.dic $ cat ~/.local/share/pyhyphen/dictionaries.json { "de": { "file": "hyph_de_DE.dic", "url": "//cgit.freedesktop.org/libreoffice/dictionaries/plain/de/hyph_de_DE.dic" }, "de_DE": { "file": "hyph_de_DE.dic", "url": "//cgit.freedesktop.org/libreoffice/dictionaries/plain/de/hyph_de_DE.dic" }, "en_PH": { "file": "hyph_en_US.dic", "url": "//cgit.freedesktop.org/libreoffice/dictionaries/plain/en/hyph_en_US.dic" }, "en_US": { "file": "hyph_en_US.dic", "url": "//cgit.freedesktop.org/libreoffice/dictionaries/plain/en/hyph_en_US.dic" } }
Mỗi mục từ điển. json chứa cả đường dẫn đến tệp từ điển và url mà nó được tải xuống từ đó