PyPylonBaslerAPI 1.2605.601__tar.gz → 1.2606.2901__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 (17) hide show
  1. {pypylonbaslerapi-1.2605.601/src/PyPylonBaslerAPI.egg-info → pypylonbaslerapi-1.2606.2901}/PKG-INFO +1 -1
  2. pypylonbaslerapi-1.2606.2901/_binary_gate.c +16 -0
  3. {pypylonbaslerapi-1.2605.601 → pypylonbaslerapi-1.2606.2901}/pyproject.toml +1 -1
  4. pypylonbaslerapi-1.2606.2901/setup.py +75 -0
  5. pypylonbaslerapi-1.2606.2901/src/PyPylonBaslerAPI/Basler_acA2040_55uc.cp310-win_amd64.pyd +0 -0
  6. {pypylonbaslerapi-1.2605.601 → pypylonbaslerapi-1.2606.2901/src/PyPylonBaslerAPI.egg-info}/PKG-INFO +1 -1
  7. {pypylonbaslerapi-1.2605.601 → pypylonbaslerapi-1.2606.2901}/src/PyPylonBaslerAPI.egg-info/SOURCES.txt +2 -0
  8. pypylonbaslerapi-1.2605.601/src/PyPylonBaslerAPI/Basler_acA2040_55uc.cp310-win_amd64.pyd +0 -0
  9. {pypylonbaslerapi-1.2605.601 → pypylonbaslerapi-1.2606.2901}/LICENSE +0 -0
  10. {pypylonbaslerapi-1.2605.601 → pypylonbaslerapi-1.2606.2901}/MANIFEST.in +0 -0
  11. {pypylonbaslerapi-1.2605.601 → pypylonbaslerapi-1.2606.2901}/README.md +0 -0
  12. {pypylonbaslerapi-1.2605.601 → pypylonbaslerapi-1.2606.2901}/setup.cfg +0 -0
  13. {pypylonbaslerapi-1.2605.601 → pypylonbaslerapi-1.2606.2901}/src/PyPylonBaslerAPI/Basler_acA2040_55uc.pyi +0 -0
  14. {pypylonbaslerapi-1.2605.601 → pypylonbaslerapi-1.2606.2901}/src/PyPylonBaslerAPI/out/Basler_acA2040_55uc.pyi +0 -0
  15. {pypylonbaslerapi-1.2605.601 → pypylonbaslerapi-1.2606.2901}/src/PyPylonBaslerAPI.egg-info/dependency_links.txt +0 -0
  16. {pypylonbaslerapi-1.2605.601 → pypylonbaslerapi-1.2606.2901}/src/PyPylonBaslerAPI.egg-info/requires.txt +0 -0
  17. {pypylonbaslerapi-1.2605.601 → pypylonbaslerapi-1.2606.2901}/src/PyPylonBaslerAPI.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyPylonBaslerAPI
3
- Version: 1.2605.601
3
+ Version: 1.2606.2901
4
4
  Summary: PyPylonBaslerAPI of DeviceAPI Python package (py-src)
5
5
  Author-email: James Lin <tylin123@ms27.hinet.net>
6
6
  License: Copyright (c) 2025 James Lin
@@ -0,0 +1,16 @@
1
+ #include <Python.h>
2
+
3
+ // 使用官方標準巨集 PyModuleDef_HEAD_INIT 進行初始化,
4
+ // 這會由 Python 內部自動對齊平台架構的型態與指標,完美避開 C4047 警告
5
+ static struct PyModuleDef binary_gate_module = {
6
+ PyModuleDef_HEAD_INIT,
7
+ "_binary_gate", // 模組名稱
8
+ NULL, // 模組文件
9
+ -1, // 模組狀態空間
10
+ NULL // 模組方法清單
11
+ };
12
+
13
+ // 微軟編譯器鏈結時必找的核心入口函數
14
+ PyMODINIT_FUNC PyInit__binary_gate(void) {
15
+ return PyModule_Create(&binary_gate_module);
16
+ }
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "PyPylonBaslerAPI"
7
- version = "1.2605.0601"
7
+ version = "1.2606.2901"
8
8
  requires-python = ">=3.10"
9
9
  description = "PyPylonBaslerAPI of DeviceAPI Python package (py-src)"
10
10
  authors = [
@@ -0,0 +1,75 @@
1
+ import os
2
+ import glob
3
+ import shutil
4
+ from setuptools import setup, Extension
5
+
6
+ # ============================================================
7
+ # 🛠️ 1. 核心防禦:自動物理隔離與還原機制
8
+ # ============================================================
9
+ # 🎯 精準對齊您的 Basler 相機控制套件目錄:src/PyPylonBaslerAPI
10
+ PKG_DIR = os.path.join("src", "PyPylonBaslerAPI")
11
+ TMP_DIR = "tmp_py_source"
12
+
13
+ # 撈出該目錄下所有敏感的原始碼,自動排除以 _ 開頭的初始化 (__init__.py) 與型別提示檔 (*.pyi)
14
+ py_files = [f for f in glob.glob(os.path.join(PKG_DIR, "*.py"))
15
+ if not os.path.basename(f).startswith("_")]
16
+
17
+ if py_files:
18
+ print(f"📦 [Security] 正在將 {len(py_files)} 個敏感原始碼檔案物理隔離...")
19
+ os.makedirs(TMP_DIR, exist_ok=True)
20
+ for f in py_files:
21
+ shutil.move(f, os.path.join(TMP_DIR, os.path.basename(f)))
22
+
23
+ # ============================================================
24
+ # 🎯 2. Windows MSVC 專門:標準 Python C 入口 (修正 64 位元結構錯位)
25
+ # ============================================================
26
+ dummy_c_file = "_binary_gate.c"
27
+ with open(dummy_c_file, "w", encoding="utf-8") as f:
28
+ f.write("""#include <Python.h>
29
+
30
+ // 使用官方標準巨集 PyModuleDef_HEAD_INIT 進行初始化,
31
+ // 這會由 Python 內部自動對齊平台架構的型態與指標,完美避開 C4047 警告
32
+ static struct PyModuleDef binary_gate_module = {
33
+ PyModuleDef_HEAD_INIT,
34
+ "_binary_gate", // 模組名稱
35
+ NULL, // 模組文件
36
+ -1, // 模組狀態空間
37
+ NULL // 模組方法清單
38
+ };
39
+
40
+ // 微軟編譯器鏈結時必找的核心入口函數
41
+ PyMODINIT_FUNC PyInit__binary_gate(void) {
42
+ return PyModule_Create(&binary_gate_module);
43
+ }
44
+ """)
45
+
46
+ # 🎯 將 Extension 的二進位擴充模組命名空間同步修正為 PyPylonBaslerAPI._binary_gate
47
+ binary_gate = Extension("PyPylonBaslerAPI._binary_gate", sources=[dummy_c_file])
48
+
49
+ # ============================================================
50
+ # 🚀 3. 呼叫標準 setup 進行打包 (強制綁定 Windows 二進位身份)
51
+ # ============================================================
52
+ try:
53
+ setup(
54
+ ext_modules=[binary_gate]
55
+ )
56
+
57
+ finally:
58
+ # ============================================================
59
+ # 🧹 4. 【最高安全防線】無論打包成功或失敗,100% 一定會執行還原與清理
60
+ # ============================================================
61
+ if os.path.exists(dummy_c_file):
62
+ try:
63
+ os.remove(dummy_c_file)
64
+ except Exception:
65
+ pass
66
+
67
+ if os.path.exists(TMP_DIR):
68
+ print("🧹 [Security] 打包結束,正在還原開發環境原始碼...")
69
+ restored_files = glob.glob(os.path.join(TMP_DIR, "*.py"))
70
+ for f in restored_files:
71
+ shutil.move(f, os.path.join(PKG_DIR, os.path.basename(f)))
72
+ try:
73
+ os.rmdir(TMP_DIR)
74
+ except Exception:
75
+ pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyPylonBaslerAPI
3
- Version: 1.2605.601
3
+ Version: 1.2606.2901
4
4
  Summary: PyPylonBaslerAPI of DeviceAPI Python package (py-src)
5
5
  Author-email: James Lin <tylin123@ms27.hinet.net>
6
6
  License: Copyright (c) 2025 James Lin
@@ -1,8 +1,10 @@
1
1
  LICENSE
2
2
  MANIFEST.in
3
3
  README.md
4
+ _binary_gate.c
4
5
  pyproject.toml
5
6
  setup.cfg
7
+ setup.py
6
8
  src/PyPylonBaslerAPI/Basler_acA2040_55uc.cp310-win_amd64.pyd
7
9
  src/PyPylonBaslerAPI/Basler_acA2040_55uc.pyi
8
10
  src/PyPylonBaslerAPI.egg-info/PKG-INFO