pyarmor 8.5.8__zip → 8.5.9__zip

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 (123) hide show
  1. {pyarmor-8.5.8 → pyarmor-8.5.9}/PKG-INFO +1 -1
  2. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/__init__.py +1 -1
  3. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/context.py +5 -1
  4. pyarmor-8.5.9/pyarmor/cli/core.data.1 +0 -0
  5. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/default.cfg +6 -9
  6. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/docker.py +4 -2
  7. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/generate.py +19 -1
  8. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/plugin.py +5 -4
  9. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/repack.py +5 -4
  10. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/resource.py +1 -1
  11. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/config.py +1 -1
  12. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/packer.py +4 -2
  13. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor.egg-info/PKG-INFO +1 -1
  14. pyarmor-8.5.9/pyarmor.egg-info/requires.txt +1 -0
  15. {pyarmor-8.5.8 → pyarmor-8.5.9}/setup.py +1 -1
  16. pyarmor-8.5.8/pyarmor/cli/core.data.1 +0 -0
  17. pyarmor-8.5.8/pyarmor.egg-info/requires.txt +0 -1
  18. {pyarmor-8.5.8 → pyarmor-8.5.9}/MANIFEST.in +0 -0
  19. {pyarmor-8.5.8 → pyarmor-8.5.9}/README.md +0 -0
  20. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/README.rst +0 -0
  21. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/__init__.py +0 -0
  22. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/benchmark.py +0 -0
  23. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/build_meta.py +0 -0
  24. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/__main__.py +0 -0
  25. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/bootstrap.py +0 -0
  26. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/bug.py +0 -0
  27. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/config.py +0 -0
  28. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/core.data.2 +0 -0
  29. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/core.data.3 +0 -0
  30. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/hdinfo.py +0 -0
  31. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/merge.py +0 -0
  32. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/mixer.py +0 -0
  33. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/public_capsule.zip +0 -0
  34. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/register.py +0 -0
  35. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cli/shell.py +0 -0
  36. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/cobuilder.py +0 -0
  37. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/README-ZH.md +0 -0
  38. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/README.md +0 -0
  39. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/build-for-exe.bat +0 -0
  40. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/build-for-freeze.bat +0 -0
  41. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/build-with-project.bat +0 -0
  42. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/build-with-project.sh +0 -0
  43. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/cx_Freeze/hello.py +0 -0
  44. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/cx_Freeze/queens.py +0 -0
  45. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/cx_Freeze/setup.py +0 -0
  46. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/helloworld/foo.py +0 -0
  47. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/obfuscate-app.bat +0 -0
  48. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/obfuscate-app.sh +0 -0
  49. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/obfuscate-pkg.bat +0 -0
  50. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/obfuscate-pkg.sh +0 -0
  51. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pack-obfuscated-scripts.bat +0 -0
  52. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pack-obfuscated-scripts.sh +0 -0
  53. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/py2exe/hello.py +0 -0
  54. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/py2exe/queens.py +0 -0
  55. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/py2exe/setup.py +0 -0
  56. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/Arithmetic.py +0 -0
  57. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/Calls.py +0 -0
  58. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/CommandLine.py +0 -0
  59. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/Constructs.py +0 -0
  60. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/Dict.py +0 -0
  61. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/Exceptions.py +0 -0
  62. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/Imports.py +0 -0
  63. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/Instances.py +0 -0
  64. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/Lists.py +0 -0
  65. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/Lookups.py +0 -0
  66. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/NewInstances.py +0 -0
  67. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/Numbers.py +0 -0
  68. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/Setup.py +0 -0
  69. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/Strings.py +0 -0
  70. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/Tuples.py +0 -0
  71. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/With.py +0 -0
  72. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/clockres.py +0 -0
  73. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/package/__init__.py +0 -0
  74. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/package/submodule.py +0 -0
  75. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/pybench.py +0 -0
  76. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/pybench/systimes.py +0 -0
  77. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/simple/queens.py +0 -0
  78. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/testmod/hello.py +0 -0
  79. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/testmod/queens.py +0 -0
  80. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/testpkg/main.py +0 -0
  81. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/testpkg/mypkg/__init__.py +0 -0
  82. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/examples/testpkg/mypkg/foo.py +0 -0
  83. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/helper/__init__.py +0 -0
  84. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/helper/build_data_module.py +0 -0
  85. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/helper/buildext.py +0 -0
  86. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/helper/get_bind_key.py +0 -0
  87. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/helper/get_license_info.py +0 -0
  88. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/helper/get_platform_name.py +0 -0
  89. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/helper/merge.py +0 -0
  90. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/helper/repack.py +0 -0
  91. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/helper/superuntime.py +0 -0
  92. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/license.tri +0 -0
  93. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/platforms/darwin/x86_64/_pytransform.dylib +0 -0
  94. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/platforms/linux/x86/_pytransform.so +0 -0
  95. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/platforms/linux/x86_64/_pytransform.so +0 -0
  96. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/platforms/windows/x86/_pytransform.dll +0 -0
  97. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/platforms/windows/x86_64/_pytransform.dll +0 -0
  98. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/plugins/README.md +0 -0
  99. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/plugins/check_ntp_time.py +0 -0
  100. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/polyfills/__init__.py +0 -0
  101. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/polyfills/argparse.py +0 -0
  102. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/product.key +0 -0
  103. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/project.py +0 -0
  104. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/protect_code.pt +0 -0
  105. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/protect_code2.pt +0 -0
  106. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/public.key +0 -0
  107. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/public_capsule.zip +0 -0
  108. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/pyarmor-deprecated.py +0 -0
  109. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/pyarmor-webui.py +0 -0
  110. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/pyarmor.py +0 -0
  111. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/pyimcore.py +0 -0
  112. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/pyshield.key +0 -0
  113. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/pyshield.lic +0 -0
  114. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/pytransform.py +0 -0
  115. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/reform.py +0 -0
  116. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/register.py +0 -0
  117. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/sppmode.py +0 -0
  118. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor/utils.py +0 -0
  119. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor.egg-info/SOURCES.txt +0 -0
  120. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor.egg-info/dependency_links.txt +0 -0
  121. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor.egg-info/entry_points.txt +0 -0
  122. {pyarmor-8.5.8 → pyarmor-8.5.9}/pyarmor.egg-info/top_level.txt +0 -0
  123. {pyarmor-8.5.8 → pyarmor-8.5.9}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.1
2
2
  Name: pyarmor
3
- Version: 8.5.8
3
+ Version: 8.5.9
4
4
  Summary: A tool used to obfuscate python scripts, bind obfuscated scripts to fixed machine or expire obfuscated scripts.
5
5
  Home-page: https://github.com/dashingsoft/pyarmor
6
6
  Author: Jondy Zhao
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
 
3
- __VERSION__ = '8.5.8'
3
+ __VERSION__ = '8.5.9'
4
4
 
5
5
  logger = logging.getLogger('cli')
6
6
 
@@ -110,7 +110,11 @@ def format_platform(plat, arch):
110
110
  ('armv6', ('armv6l',)),
111
111
  ('armv7', ('armv7l',)),
112
112
  ('aarch32', ('aarch32',)),
113
- ('aarch64', ('aarch64', 'arm64'))
113
+ ('aarch64', ('aarch64', 'arm64')),
114
+ ('ppc64le', ('ppc64le',)),
115
+ ('mips32el', ('mipsel', 'mips32el')),
116
+ ('mips64el', ('mips64el',)),
117
+ ('riscv64', ('riscv64',)),
114
118
  )
115
119
 
116
120
  for alias, platlist in plat_table:
Binary file
@@ -3,10 +3,10 @@
3
3
  ;; Pyarmor version
4
4
  major = 8
5
5
  minor = 5
6
- patch = 8
6
+ patch = 9
7
7
 
8
8
  ;; Compatible core version
9
- cli.core = 6.5.1
9
+ cli.core = 6.5.2
10
10
 
11
11
  ;; Deprecated since Pyarmor 8.2.5
12
12
  ; cli.runtime = 3.2.5
@@ -93,6 +93,7 @@ rft_enables = builtin import function class method global local
93
93
  rft_auto_exclude = 1
94
94
 
95
95
  ;; Export all the names in module attribute __all__
96
+ ;; It means leave all the names in the __all__ as they're
96
97
  rft_auto_export = 1
97
98
 
98
99
  ;; Enable dev mode for rft
@@ -255,18 +256,14 @@ on_error = 0
255
256
  ;; 3600s
256
257
  ;; 60m
257
258
  ;; 1h
258
- ;; 1
259
+ ;; 1 = 1h
259
260
  ; period = 1
260
261
 
261
- ;; Expired runtime key. Check local time if there is leading '.',
262
- ;; otherwise check ntp time
262
+ ;; Expired runtime key, support 2 forms:
263
263
  ;;
264
- ;; 30
264
+ ;; 30: expired in 30 days
265
265
  ;; 2025-12-31
266
266
  ;;
267
- ;; .30
268
- ;; .2025-12-30
269
- ;;
270
267
  ; expired =
271
268
 
272
269
  ;; Check network time by those servers
@@ -32,6 +32,7 @@ from .register import Register, MACHFLAGS
32
32
 
33
33
 
34
34
  CONFIG = {
35
+ 'host': '0.0.0.0',
35
36
  'port': 29092,
36
37
  'home': os.path.expanduser(os.path.join('~', '.pyarmor', 'docker')),
37
38
  'machid': None,
@@ -110,6 +111,7 @@ def main_entry():
110
111
  parser = argparse.ArgumentParser()
111
112
  parser.add_argument('-d', '--debug', action='store_true',
112
113
  help='Enable debug mode')
114
+ parser.add_argument('--host', type=str, default=CONFIG['host'])
113
115
  parser.add_argument('-p', '--port', type=int, default=CONFIG['port'],
114
116
  help=argparse.SUPPRESS)
115
117
  parser.add_argument('-s', '--sock', default='/var/run/docker.sock',
@@ -135,9 +137,9 @@ def main_entry():
135
137
  CONFIG['machid'] = [Pytransform3.get_hd_info(x) for x in MACHFLAGS]
136
138
  logging.debug('machine id: %s', CONFIG['machid'])
137
139
 
138
- host, port = '0.0.0.0', args.port
140
+ host, port = args.host, args.port
139
141
  with socketserver.TCPServer((host, port), DockerAuthHandler) as server:
140
- logging.info('listen container auth request on %s:%s', host, args.port)
142
+ logging.info('listen container auth request on %s:%s', host, port)
141
143
  server.serve_forever()
142
144
 
143
145
 
@@ -99,6 +99,21 @@ class Builder(object):
99
99
  self.ctx.runtime_key = self.generate_runtime_key()
100
100
  Pytransform3.generate_runtime_package(self.ctx, output)
101
101
 
102
+ def _generate_obfuscated_script(self, res):
103
+ try:
104
+ return Pytransform3.generate_obfuscated_script(self.ctx, res)
105
+ except RuntimeError as e:
106
+ if str(e) != 'out of license':
107
+ raise
108
+
109
+ def _copy_script(self, path, res):
110
+ logger.warning('%s is not obfuscated because out of license', res)
111
+ fullpath = os.path.join(path, res.output_filename)
112
+ output = os.path.dirname(fullpath)
113
+ os.makedirs(output, exist_ok=True)
114
+ logger.info('write %s (not obfuscated)', fullpath)
115
+ shutil.copy2(res.fullpath, output)
116
+
102
117
  def _obfuscate_scripts(self):
103
118
  rev = self.ctx.version_info()
104
119
  template = self.ctx.bootstrap_template
@@ -126,7 +141,10 @@ class Builder(object):
126
141
  continue
127
142
 
128
143
  logger.info('obfuscating %s', r)
129
- code = Pytransform3.generate_obfuscated_script(self.ctx, r)
144
+ code = self._generate_obfuscated_script(r)
145
+ if code is None:
146
+ self._copy_script(path, r)
147
+ continue
130
148
  source = r.generate_output(
131
149
  template, code, relative=relative, pkgname=pkgname,
132
150
  bootpath=bootpath, rev=rev
@@ -236,10 +236,11 @@ def find_runtime_package(ctx, output):
236
236
  return os.path.join(output, rtname)
237
237
  if isinstance(prefix, str):
238
238
  return os.path.join(output, prefix.replace('.', os.path.sep), rtname)
239
- for entry in os.scandir(output):
240
- if entry.is_dir():
241
- if rtname in os.listdir(entry.path):
242
- return os.path.join(entry.path, rtname)
239
+ with os.scandir(output) as iterator:
240
+ for entry in iterator:
241
+ if entry.is_dir():
242
+ if rtname in os.listdir(entry.path):
243
+ return os.path.join(entry.path, rtname)
243
244
 
244
245
 
245
246
  class DarwinUniversalPlugin:
@@ -2,14 +2,14 @@ import logging
2
2
  import marshal
3
3
  import os
4
4
  import shutil
5
- import struct
6
5
  import sys
7
- import tempfile
8
6
 
9
7
  from fnmatch import fnmatch
10
8
  from subprocess import check_call, DEVNULL
11
9
 
12
10
  # Only used by BundleRepacker, they could be removed with deprecated routines
11
+ import struct
12
+ import tempfile
13
13
  from importlib._bootstrap_external import _code_to_timestamp_pyc
14
14
  from PyInstaller.archive.writers import ZlibArchiveWriter, CArchiveWriter
15
15
  from PyInstaller.archive.readers import CArchiveReader
@@ -41,7 +41,7 @@ def autoclean_output(output, autoclean=True):
41
41
  shutil.rmtree(output)
42
42
 
43
43
 
44
- # This patch is used to modify the specfile generate by PyInstaller
44
+ # This patch is used to modify the specfile generated by PyInstaller
45
45
  #
46
46
  # It mainly does:
47
47
  #
@@ -711,7 +711,8 @@ class BundleRepacker:
711
711
  logger.debug('one file mode is %s', bool(self.one_file_mode))
712
712
 
713
713
  def build(self):
714
- self.repack(self.output, self.ctx.runtime_package_name)
714
+ obfpath = os.path.normpath(self.ctx.pack_obfpath)
715
+ self.repack(obfpath, self.ctx.runtime_package_name)
715
716
 
716
717
  def repack(self, obfpath, rtname, entry=None):
717
718
  buildpath = self.buildpath
@@ -200,7 +200,7 @@ class PycResource(FileResource):
200
200
  class PathResource(Resource):
201
201
 
202
202
  def __init__(self, path, name=None, parent=None):
203
- super().__init__(path, name=name, parent=parent)
203
+ super().__init__(path, name=os.path.basename(path), parent=parent)
204
204
  self.respaths = []
205
205
  self.resfiles = []
206
206
 
@@ -1,6 +1,6 @@
1
1
  from sys import platform
2
2
 
3
- version = '8.5.8'
3
+ version = '8.5.9'
4
4
 
5
5
  # The corresponding version of pytransform.so
6
6
  core_version = 'r52.6'
@@ -294,6 +294,8 @@ def _patch_specfile(obfdist, src, specfile, hookpath=None, encoding=None,
294
294
  end_lines = ("# Patch end.", "", "",)
295
295
 
296
296
  main_lines = (
297
+ "from PyInstaller.config import CONF",
298
+ "_code_cache = getattr(a.pure, '_code_cache', CONF['code_cache'].get(id(a.pure)))",
297
299
  "_src = %s" % repr(os.path.abspath(src)),
298
300
  "_obf = 0",
299
301
  "for i in range(len(a.scripts)):",
@@ -308,9 +310,9 @@ def _patch_specfile(obfdist, src, specfile, hookpath=None, encoding=None,
308
310
  " if a.pure[i][1].startswith(_src):",
309
311
  " x = a.pure[i][1].replace(_src, r'%s')" % p,
310
312
  " if os.path.exists(x):",
311
- " if hasattr(a.pure, '_code_cache'):",
313
+ " if _code_cache:",
312
314
  " with open(x) as f:",
313
- " a.pure._code_cache[a.pure[i][0]] = compile(f.read(), a.pure[i][1], 'exec')",
315
+ " _code_cache[a.pure[i][0]] = compile(f.read(), a.pure[i][1], 'exec')",
314
316
  " a.pure[i] = a.pure[i][0], x, a.pure[i][2]",
315
317
  )
316
318
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.1
2
2
  Name: pyarmor
3
- Version: 8.5.8
3
+ Version: 8.5.9
4
4
  Summary: A tool used to obfuscate python scripts, bind obfuscated scripts to fixed machine or expire obfuscated scripts.
5
5
  Home-page: https://github.com/dashingsoft/pyarmor
6
6
  Author: Jondy Zhao
@@ -0,0 +1 @@
1
+ pyarmor.cli.core~=6.5.2
@@ -113,7 +113,7 @@ setup(
113
113
  },
114
114
 
115
115
  install_requires=[
116
- 'pyarmor.cli.core~=6.5.1'
116
+ 'pyarmor.cli.core~=6.5.2'
117
117
  ],
118
118
 
119
119
  entry_points={
Binary file
@@ -1 +0,0 @@
1
- pyarmor.cli.core~=6.5.1
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes