hython-lang 2.0.0__tar.gz → 2.0.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. {hython_lang-2.0.0 → hython_lang-2.0.1}/CHANGELOG.md +6 -0
  2. hython_lang-2.0.1/PKG-INFO +389 -0
  3. hython_lang-2.0.1/README.md +365 -0
  4. {hython_lang-2.0.0 → hython_lang-2.0.1}/installer/hython.wxs +7 -2
  5. {hython_lang-2.0.0 → hython_lang-2.0.1}/pyproject.toml +1 -1
  6. {hython_lang-2.0.0 → hython_lang-2.0.1}/scripts/build_hython_native.py +2 -1
  7. {hython_lang-2.0.0 → hython_lang-2.0.1}/scripts/build_installer.py +16 -0
  8. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/__init__.py +1 -1
  9. hython_lang-2.0.1/src/hython_lang.egg-info/PKG-INFO +389 -0
  10. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_release_contract.py +2 -2
  11. hython_lang-2.0.0/PKG-INFO +0 -327
  12. hython_lang-2.0.0/README.md +0 -303
  13. hython_lang-2.0.0/src/hython_lang.egg-info/PKG-INFO +0 -327
  14. {hython_lang-2.0.0 → hython_lang-2.0.1}/LICENSE +0 -0
  15. {hython_lang-2.0.0 → hython_lang-2.0.1}/MANIFEST.in +0 -0
  16. {hython_lang-2.0.0 → hython_lang-2.0.1}/SECURITY.md +0 -0
  17. {hython_lang-2.0.0 → hython_lang-2.0.1}/assets/hython-icon.png +0 -0
  18. {hython_lang-2.0.0 → hython_lang-2.0.1}/assets/hython.ico +0 -0
  19. {hython_lang-2.0.0 → hython_lang-2.0.1}/build-hython.bat +0 -0
  20. {hython_lang-2.0.0 → hython_lang-2.0.1}/build-installer.bat +0 -0
  21. {hython_lang-2.0.0 → hython_lang-2.0.1}/docs/COMPILER.md +0 -0
  22. {hython_lang-2.0.0 → hython_lang-2.0.1}/docs/LANGUAGE.md +0 -0
  23. {hython_lang-2.0.0 → hython_lang-2.0.1}/examples//354/225/210/353/205/225.hy" +0 -0
  24. {hython_lang-2.0.0 → hython_lang-2.0.1}/examples//354/273/264/355/214/214/354/235/274.hy" +0 -0
  25. {hython_lang-2.0.0 → hython_lang-2.0.1}/examples//355/225/234/352/270/200/354/230/244/353/245/230.hy" +0 -0
  26. {hython_lang-2.0.0 → hython_lang-2.0.1}/publish-pypi.bat +0 -0
  27. {hython_lang-2.0.0 → hython_lang-2.0.1}/scripts/build_hython_exe.py +0 -0
  28. {hython_lang-2.0.0 → hython_lang-2.0.1}/scripts/build_pypi.py +0 -0
  29. {hython_lang-2.0.0 → hython_lang-2.0.1}/scripts/hython_frozen_launcher.py +0 -0
  30. {hython_lang-2.0.0 → hython_lang-2.0.1}/scripts/stability.py +0 -0
  31. {hython_lang-2.0.0 → hython_lang-2.0.1}/setup.cfg +0 -0
  32. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/__main__.py +0 -0
  33. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/bytecode.py +0 -0
  34. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/cli.py +0 -0
  35. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/compiler.py +0 -0
  36. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/compiler_manager.py +0 -0
  37. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/diagnostics.py +0 -0
  38. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/environment.py +0 -0
  39. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/exe_builder.py +0 -0
  40. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/frontend.py +0 -0
  41. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/hir.py +0 -0
  42. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/importer.py +0 -0
  43. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/package_manager.py +0 -0
  44. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/phonetics.py +0 -0
  45. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/runtime.py +0 -0
  46. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/runtime_manager.py +0 -0
  47. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/translator.py +0 -0
  48. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/updater.py +0 -0
  49. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/vm.py +0 -0
  50. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython/vocabulary.py +0 -0
  51. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython_lang.egg-info/SOURCES.txt +0 -0
  52. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython_lang.egg-info/dependency_links.txt +0 -0
  53. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython_lang.egg-info/entry_points.txt +0 -0
  54. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython_lang.egg-info/requires.txt +0 -0
  55. {hython_lang-2.0.0 → hython_lang-2.0.1}/src/hython_lang.egg-info/top_level.txt +0 -0
  56. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_advanced_functions.py +0 -0
  57. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_annotations.py +0 -0
  58. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_assignment_semantics.py +0 -0
  59. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_async.py +0 -0
  60. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_build_cli.py +0 -0
  61. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_cli_diagnostics.py +0 -0
  62. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_closures.py +0 -0
  63. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_compiler.py +0 -0
  64. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_compiler_manager.py +0 -0
  65. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_comprehensions.py +0 -0
  66. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_control_imports.py +0 -0
  67. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_diagnostics.py +0 -0
  68. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_exe_builder.py +0 -0
  69. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_frontend.py +0 -0
  70. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_fstrings.py +0 -0
  71. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_generators.py +0 -0
  72. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_hir.py +0 -0
  73. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_importer.py +0 -0
  74. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_loop_control.py +0 -0
  75. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_loop_else.py +0 -0
  76. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_name_errors.py +0 -0
  77. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_native_builtins.py +0 -0
  78. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_native_classes.py +0 -0
  79. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_native_exceptions.py +0 -0
  80. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_native_features.py +0 -0
  81. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_native_modules.py +0 -0
  82. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_package_manager.py +0 -0
  83. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_patterns_expressions.py +0 -0
  84. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_phonetics.py +0 -0
  85. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_python314_semantic_matrix.py +0 -0
  86. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_python314_syntax_matrix.py +0 -0
  87. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_runtime.py +0 -0
  88. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_runtime_manager.py +0 -0
  89. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_stability.py +0 -0
  90. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_translator.py +0 -0
  91. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_unpacking.py +0 -0
  92. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_updater.py +0 -0
  93. {hython_lang-2.0.0 → hython_lang-2.0.1}/tests/test_with_lambda.py +0 -0
@@ -1,5 +1,11 @@
1
1
  # 변경 기록
2
2
 
3
+ ## 2.0.1 - 2026-07-25
4
+
5
+ - Windows MSI에 설치·진행·완료 및 복구/제거 UI를 추가했습니다.
6
+ - 설치 여부가 보이지 않던 2.0.0 MSI의 사용자 경험 문제를 수정했습니다.
7
+ - Winget 배포용 MSI 메타데이터와 버전 검증을 강화했습니다.
8
+
3
9
  ## 2.0.0 - 2026-07-24
4
10
 
5
11
  - 모든 최상위 CLI 명령과 컴파일러·패키지·런타임 하위 명령에 한글 별칭을 추가했습니다.
@@ -0,0 +1,389 @@
1
+ Metadata-Version: 2.4
2
+ Name: hython-lang
3
+ Version: 2.0.1
4
+ Summary: Python, pronounced in Hangul
5
+ Author: Hython contributors
6
+ License-Expression: MIT
7
+ Keywords: python,korean,esoteric-language,compiler,virtual-machine
8
+ Classifier: Development Status :: 5 - Production/Stable
9
+ Classifier: Programming Language :: Python :: 3.14
10
+ Classifier: Topic :: Software Development :: Compilers
11
+ Requires-Python: >=3.14
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Provides-Extra: exe
15
+ Requires-Dist: pyinstaller>=6.16; extra == "exe"
16
+ Provides-Extra: native
17
+ Requires-Dist: nuitka>=2.8; extra == "native"
18
+ Requires-Dist: ordered-set>=4.1; extra == "native"
19
+ Requires-Dist: zstandard>=0.23; extra == "native"
20
+ Provides-Extra: publish
21
+ Requires-Dist: build>=1.3; extra == "publish"
22
+ Requires-Dist: twine>=6.2; extra == "publish"
23
+ Dynamic: license-file
24
+
25
+ # 하이썬 (Hython)
26
+
27
+ [![PyPI](https://img.shields.io/pypi/v/hython-lang?label=PyPI&color=3776ab)](https://pypi.org/project/hython-lang/)
28
+ [![Python](https://img.shields.io/pypi/pyversions/hython-lang?label=Python)](https://pypi.org/project/hython-lang/)
29
+ [![License](https://img.shields.io/pypi/l/hython-lang?label=License)](LICENSE)
30
+ [![Status](https://img.shields.io/badge/status-stable-brightgreen)](CHANGELOG.md)
31
+
32
+ > Python, pronounced in Hangul.
33
+
34
+ 하이썬은 Python의 의미를 번역하는 대신 영어 발음을 한글로 적는 난해한 프로그래밍
35
+ 언어입니다. Python 호환 실행기와 독립 HBC 컴파일러·가상 머신을 함께 제공합니다.
36
+
37
+ ```hython
38
+ 데프 인사(이름):
39
+ 프린트(에프"안녕, {이름}!")
40
+
41
+ 포 번호 인 레인지(3):
42
+ 인사(에프"하이썬 {번호}")
43
+ ```
44
+
45
+ ## 빠른 설치
46
+
47
+ Python 3.14 이상이 필요합니다.
48
+
49
+ ```console
50
+ py -3.14 -m pip install hython-lang
51
+ hython --version
52
+ ```
53
+
54
+ 현재 공개 버전은 [PyPI의 `hython-lang`](https://pypi.org/project/hython-lang/)에서
55
+ 설치할 수 있습니다.
56
+
57
+ ## 첫 실행
58
+
59
+ `안녕.hy` 파일을 만듭니다.
60
+
61
+ ```hython
62
+ 이름 = "하이썬"
63
+ 프린트(에프"안녕, {이름}!")
64
+ ```
65
+
66
+ 실행합니다.
67
+
68
+ ```console
69
+ hython 소스실행 안녕.hy
70
+ ```
71
+
72
+ 영어 명령도 동일하게 지원합니다.
73
+
74
+ ```console
75
+ hython run 안녕.hy
76
+ ```
77
+
78
+ ## 주요 특징
79
+
80
+ - Python 키워드와 내장 함수의 한글 발음형 문법
81
+ - Python 3.14 호환 실행 모드
82
+ - 하이썬 전용 AST, HIR, HBC 바이트코드와 가상 머신
83
+ - `.pyc` 및 CPython opcode와 다른 독립 HBC 형식
84
+ - 한글 오류 메시지와 traceback
85
+ - 표준 라이브러리 및 설치 패키지 공개 API 발음 사전
86
+ - 패키지 설치·업데이트·제거와 문법 사전 자동 동기화
87
+ - Python 파일의 완전 한글 변환과 영어 식별자 감사
88
+ - HBC 프로그램의 독립 Windows EXE 빌드
89
+ - Nuitka/MSVC 기반 C 변환 하이썬 실행 파일
90
+ - HBC 컴파일러 검증·업데이트·롤백
91
+
92
+ ## 문법 예시
93
+
94
+ ### 조건과 반복
95
+
96
+ ```hython
97
+ 합계 = 0
98
+
99
+ 포 숫자 인 레인지(10):
100
+ 이프 숫자 % 2 == 0:
101
+ 합계 += 숫자
102
+
103
+ 프린트(합계)
104
+ ```
105
+
106
+ ### 함수와 클래스
107
+
108
+ ```hython
109
+ 클래스 사람:
110
+ 데프 __이니트__(셀프, 이름):
111
+ 셀프.이름 = 이름
112
+
113
+ 데프 인사(셀프):
114
+ 리턴 에프"안녕하세요, {셀프.이름}입니다."
115
+
116
+ 사용자 = 사람("하이썬")
117
+ 프린트(사용자.인사())
118
+ ```
119
+
120
+ ### 예외 처리
121
+
122
+ ```hython
123
+ 트라이:
124
+ 값 = 인트(인풋("숫자: "))
125
+ 프린트(10 / 값)
126
+ 익셉트 밸류에러:
127
+ 프린트("숫자를 입력해야 합니다.")
128
+ 익셉트 제로디비전에러:
129
+ 프린트("0으로 나눌 수 없습니다.")
130
+ ```
131
+
132
+ ### 모듈
133
+
134
+ ```hython
135
+ 인폴트 제이슨
136
+
137
+ 자료 = 제이슨.로드스('{"값": 42}')
138
+ 프린트(자료["값"])
139
+ ```
140
+
141
+ 설치·동기화된 발음 사전에 따라 실제 모듈 철자가 달라질 수 있습니다. 생성된 사전은
142
+ `~/.hython/dictionaries`에서 확인하고 수정할 수 있습니다.
143
+
144
+ ### Tkinter
145
+
146
+ Tkinter는 pip 패키지가 아니라 Python의 Tcl/Tk 구성 요소입니다. Tcl/Tk가 포함된 공식
147
+ Python 환경에서는 다음처럼 영어 API 없이 작성할 수 있습니다.
148
+
149
+ ```hython
150
+ 인폴트 티킨터 애즈 티케이
151
+
152
+ 창 = 티케이.티케이()
153
+ 창.타이틀("하이썬")
154
+ 창.지오메트리("500x300")
155
+ 창.메인루프()
156
+ ```
157
+
158
+ ## 문자열 접두사
159
+
160
+ 문자열 접두사도 한글로 쓸 수 있습니다.
161
+
162
+ | Python | 하이썬 |
163
+ |---|---|
164
+ | `f"..."` | `에프"..."` |
165
+ | `r"..."` | `알"..."` |
166
+ | `b"..."` | `비"..."` |
167
+ | `u"..."` | `유"..."` |
168
+ | `rf"..."` | `알에프"..."` |
169
+
170
+ 문자열 내용, URL, 실제 파일 경로와 환경 변수명은 외부 시스템에 전달되는 데이터이므로
171
+ 원문을 보존합니다.
172
+
173
+ ## 명령어
174
+
175
+ 영어 명령과 한글 별칭을 함께 제공합니다.
176
+
177
+ | 기능 | 한글 명령 | 영어 명령 |
178
+ |---|---|---|
179
+ | 소스 실행 | `hython 소스실행 파일.hy` | `hython run 파일.hy` |
180
+ | 대화형 실행 | `hython 대화` | `hython repl` |
181
+ | HBC 컴파일 | `hython 컴파일 파일.hy` | `hython compile 파일.hy` |
182
+ | HBC 실행 | `hython 바이트실행 파일.hbc` | `hython execute 파일.hbc` |
183
+ | 프로젝트 빌드 | `hython 빌드 .` | `hython build .` |
184
+ | EXE 생성 | `hython 실행파일 파일.hbc` | `hython exe 파일.hbc` |
185
+ | 영어 감사 | `hython 감사 .` | `hython audit .` |
186
+ | 업데이트 | `hython 업데이트` | `hython update` |
187
+ | 환경 진단 | `hython 진단` | `hython doctor` |
188
+
189
+ 전체 도움말:
190
+
191
+ ```console
192
+ hython --help
193
+ hython 명령 --help
194
+ ```
195
+
196
+ ## Python 코드 변환
197
+
198
+ 일반 Python 파일을 하이썬으로 변환합니다.
199
+
200
+ ```console
201
+ hython 변환 program.py --reverse -o program.hy
202
+ ```
203
+
204
+ 사용자 식별자와 문자열 접두사까지 한글화합니다.
205
+
206
+ ```console
207
+ hython 변환 program.py --reverse --complete -o 완전한글.hy
208
+ hython 감사 완전한글.hy
209
+ ```
210
+
211
+ 하이썬을 Python으로 되돌릴 수도 있습니다.
212
+
213
+ ```console
214
+ hython 변환 program.hy -o program.py
215
+ ```
216
+
217
+ ## 패키지 관리
218
+
219
+ 패키지를 설치하면 배포판의 import 모듈을 찾고 Python 소스와 공개 런타임 API를 분석해
220
+ 발음 사전을 생성합니다.
221
+
222
+ ```console
223
+ hython 패키지 설치 requests
224
+ hython 패키지 설치 beautifulsoup4
225
+ hython 패키지 제거 requests
226
+ ```
227
+
228
+ 설치된 모듈을 다시 분석합니다.
229
+
230
+ ```console
231
+ hython 패키지 분석 requests
232
+ ```
233
+
234
+ 신뢰하지 않는 모듈은 실행 없는 정적 분석만 사용할 수 있습니다.
235
+
236
+ ```console
237
+ hython 패키지 분석 모듈명 --static
238
+ ```
239
+
240
+ ## Python 런타임 업데이트
241
+
242
+ ```console
243
+ hython 초기화
244
+ hython 업데이트
245
+ hython 업데이트 --no-runtime
246
+ hython 런타임 정보
247
+ hython 런타임 동기화
248
+ hython 런타임 검사 .
249
+ ```
250
+
251
+ `업데이트`는 Windows의 공식 Python install manager를 통해 런타임을 갱신하고, 새
252
+ Python의 문법 프로필·표준 라이브러리·설치 패키지 발음 사전을 재생성합니다.
253
+
254
+ Python 호환 실행 모드는 활성 Python이 지원하는 문법을 바로 사용합니다. 새로운 문법을
255
+ 독립 HBC 명령으로 변환하려면 해당 문법을 지원하는 HBC 컴파일러 릴리스가 필요합니다.
256
+
257
+ ## HBC 컴파일러와 VM
258
+
259
+ ```console
260
+ hython 컴파일 examples\컴파일.hy -o 프로그램.hbc
261
+ hython 바이트실행 프로그램.hbc
262
+ hython 해체 프로그램.hbc
263
+ ```
264
+
265
+ HBC는 `HYBC` 헤더, 자체 스택 명령어, 압축 페이로드와 SHA-256 무결성 검사를
266
+ 사용합니다. 원본 `.hy` 파일이나 CPython `.pyc` 없이 Hython VM에서 실행됩니다.
267
+
268
+ ### 프로젝트 빌드
269
+
270
+ ```console
271
+ hython 빌드 프로젝트 -o dist
272
+ hython 바이트실행 dist\main.hbc
273
+ ```
274
+
275
+ ### Windows EXE
276
+
277
+ EXE 빌드 기능을 설치합니다.
278
+
279
+ ```console
280
+ py -3.14 -m pip install "hython-lang[exe]"
281
+ ```
282
+
283
+ HBC를 독립 실행 파일로 만듭니다.
284
+
285
+ ```console
286
+ hython 실행파일 프로그램.hbc -o 프로그램.exe
287
+ hython 실행파일 프로그램.hbc -o 프로그램.exe --windowed --icon app.ico
288
+ ```
289
+
290
+ ## 소스에서 개발
291
+
292
+ 저장소를 받은 뒤 개발 모드로 설치합니다.
293
+
294
+ ```console
295
+ py -3.14 -m pip install -e ".[exe,native,publish]"
296
+ py -3.14 -m unittest discover -s tests -q
297
+ ```
298
+
299
+ 현재 테스트 수와 최신 변경 사항은 [CHANGELOG.md](CHANGELOG.md)에서 확인할 수 있습니다.
300
+
301
+ ## C 기반 하이썬 실행 파일 빌드
302
+
303
+ Windows에서 다음 도구가 필요합니다.
304
+
305
+ - Python 3.14
306
+ - Visual Studio 또는 Build Tools의 MSVC C/C++ 도구
307
+ - Nuitka
308
+
309
+ ```console
310
+ build-hython.bat
311
+ ```
312
+
313
+ 빌드 과정:
314
+
315
+ ```text
316
+ 전체 회귀 테스트
317
+ → Nuitka C 소스 생성
318
+ → MSVC 컴파일 및 링크
319
+ → release\hython.exe 생성
320
+ → HBC smoke test
321
+ ```
322
+
323
+ 생성 파일:
324
+
325
+ ```text
326
+ release\hython.exe
327
+ release\hython.exe.sha256
328
+ release\hython-native-report.xml
329
+ ```
330
+
331
+ ## Windows 설치 프로그램
332
+
333
+ WiX가 설치된 환경에서 MSI를 생성합니다.
334
+
335
+ ```console
336
+ build-installer.bat
337
+ ```
338
+
339
+ MSI는 Program Files 설치, 시스템 PATH, 시작 메뉴 바로가기와 Windows 제거·업그레이드를
340
+ 지원합니다.
341
+
342
+ ## PyPI 배포
343
+
344
+ 배포 파일만 생성하고 검증합니다.
345
+
346
+ ```console
347
+ publish-pypi.bat
348
+ ```
349
+
350
+ TestPyPI 또는 실제 PyPI에 게시합니다.
351
+
352
+ ```console
353
+ publish-pypi.bat testpypi
354
+ publish-pypi.bat pypi
355
+ ```
356
+
357
+ PyPI 버전은 재사용할 수 없습니다. 공개 후 수정판은 `2.0.1`, `2.0.2`처럼 새 버전으로
358
+ 게시해야 합니다.
359
+
360
+ ## 프로젝트 구조
361
+
362
+ ```text
363
+ src/hython/ 하이썬 실행기·컴파일러·VM
364
+ tests/ 회귀 및 호환성 테스트
365
+ examples/ 하이썬 예제
366
+ docs/ 언어와 컴파일러 문서
367
+ scripts/ 빌드·검증·배포 도구
368
+ installer/ Windows MSI 정의
369
+ assets/ 아이콘과 이미지
370
+ ```
371
+
372
+ ## 기여
373
+
374
+ 버그 제보와 기능 제안은 GitHub Issues를 이용해 주세요. 변경을 제안할 때는 다음을
375
+ 확인해 주세요.
376
+
377
+ 1. 기존 테스트가 모두 통과하는지 확인합니다.
378
+ 2. 변경한 동작의 회귀 테스트를 추가합니다.
379
+ 3. 사용자에게 보이는 오류와 도움말은 가능한 한 한국어로 작성합니다.
380
+ 4. 공개 API 또는 문법 변경은 `CHANGELOG.md`에 기록합니다.
381
+
382
+ ## 보안
383
+
384
+ 취약점은 공개 Issue보다 [SECURITY.md](SECURITY.md)의 절차를 따라 비공개로 제보해
385
+ 주세요. PyPI 토큰, 인증서 암호와 개인 키를 Issue·커밋·로그에 포함하지 마세요.
386
+
387
+ ## 라이선스
388
+
389
+ 하이썬은 [MIT License](LICENSE)로 배포됩니다.