pyarmor 9.0.3__zip → 9.0.5__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 (125) hide show
  1. {pyarmor-9.0.3 → pyarmor-9.0.5}/PKG-INFO +1 -1
  2. {pyarmor-9.0.3 → pyarmor-9.0.5}/README.md +6 -1
  3. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/__init__.py +1 -1
  4. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/__main__.py +71 -58
  5. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/bootstrap.py +2 -2
  6. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/bug.py +8 -1
  7. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/config.py +1 -1
  8. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/context.py +1 -1
  9. pyarmor-9.0.5/pyarmor/cli/core.data.1 +0 -0
  10. pyarmor-9.0.5/pyarmor/cli/core.data.2 +0 -0
  11. pyarmor-9.0.5/pyarmor/cli/core.data.3 +0 -0
  12. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/default.cfg +77 -7
  13. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/plugin.py +3 -0
  14. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/register.py +3 -3
  15. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/shell.py +0 -1
  16. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/config.py +1 -1
  17. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/plugins/README.md +4 -0
  18. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor.egg-info/PKG-INFO +1 -1
  19. pyarmor-9.0.5/pyarmor.egg-info/requires.txt +1 -0
  20. {pyarmor-9.0.3 → pyarmor-9.0.5}/setup.py +1 -1
  21. pyarmor-9.0.3/pyarmor/cli/core.data.1 +0 -0
  22. pyarmor-9.0.3/pyarmor/cli/core.data.2 +0 -0
  23. pyarmor-9.0.3/pyarmor/cli/core.data.3 +0 -0
  24. pyarmor-9.0.3/pyarmor.egg-info/requires.txt +0 -1
  25. {pyarmor-9.0.3 → pyarmor-9.0.5}/MANIFEST.in +0 -0
  26. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/README.rst +0 -0
  27. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/__init__.py +0 -0
  28. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/benchmark.py +0 -0
  29. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/build_meta.py +0 -0
  30. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/docker.py +0 -0
  31. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/generate.py +0 -0
  32. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/hdinfo.py +0 -0
  33. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/merge.py +0 -0
  34. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/mixer.py +0 -0
  35. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/public_capsule.zip +0 -0
  36. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/repack.py +0 -0
  37. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cli/resource.py +0 -0
  38. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/cobuilder.py +0 -0
  39. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/README-ZH.md +0 -0
  40. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/README.md +0 -0
  41. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/build-for-exe.bat +0 -0
  42. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/build-for-freeze.bat +0 -0
  43. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/build-with-project.bat +0 -0
  44. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/build-with-project.sh +0 -0
  45. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/cx_Freeze/hello.py +0 -0
  46. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/cx_Freeze/queens.py +0 -0
  47. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/cx_Freeze/setup.py +0 -0
  48. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/helloworld/foo.py +0 -0
  49. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/obfuscate-app.bat +0 -0
  50. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/obfuscate-app.sh +0 -0
  51. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/obfuscate-pkg.bat +0 -0
  52. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/obfuscate-pkg.sh +0 -0
  53. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pack-obfuscated-scripts.bat +0 -0
  54. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pack-obfuscated-scripts.sh +0 -0
  55. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/py2exe/hello.py +0 -0
  56. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/py2exe/queens.py +0 -0
  57. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/py2exe/setup.py +0 -0
  58. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/Arithmetic.py +0 -0
  59. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/Calls.py +0 -0
  60. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/CommandLine.py +0 -0
  61. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/Constructs.py +0 -0
  62. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/Dict.py +0 -0
  63. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/Exceptions.py +0 -0
  64. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/Imports.py +0 -0
  65. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/Instances.py +0 -0
  66. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/Lists.py +0 -0
  67. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/Lookups.py +0 -0
  68. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/NewInstances.py +0 -0
  69. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/Numbers.py +0 -0
  70. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/Setup.py +0 -0
  71. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/Strings.py +0 -0
  72. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/Tuples.py +0 -0
  73. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/With.py +0 -0
  74. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/clockres.py +0 -0
  75. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/package/__init__.py +0 -0
  76. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/package/submodule.py +0 -0
  77. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/pybench.py +0 -0
  78. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/pybench/systimes.py +0 -0
  79. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/simple/queens.py +0 -0
  80. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/testmod/hello.py +0 -0
  81. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/testmod/queens.py +0 -0
  82. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/testpkg/main.py +0 -0
  83. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/testpkg/mypkg/__init__.py +0 -0
  84. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/examples/testpkg/mypkg/foo.py +0 -0
  85. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/helper/__init__.py +0 -0
  86. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/helper/build_data_module.py +0 -0
  87. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/helper/buildext.py +0 -0
  88. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/helper/get_bind_key.py +0 -0
  89. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/helper/get_license_info.py +0 -0
  90. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/helper/get_platform_name.py +0 -0
  91. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/helper/merge.py +0 -0
  92. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/helper/repack.py +0 -0
  93. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/helper/superuntime.py +0 -0
  94. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/license.tri +0 -0
  95. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/packer.py +0 -0
  96. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/platforms/darwin/x86_64/_pytransform.dylib +0 -0
  97. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/platforms/linux/x86/_pytransform.so +0 -0
  98. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/platforms/linux/x86_64/_pytransform.so +0 -0
  99. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/platforms/windows/x86/_pytransform.dll +0 -0
  100. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/platforms/windows/x86_64/_pytransform.dll +0 -0
  101. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/plugins/check_ntp_time.py +0 -0
  102. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/polyfills/__init__.py +0 -0
  103. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/polyfills/argparse.py +0 -0
  104. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/product.key +0 -0
  105. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/project.py +0 -0
  106. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/protect_code.pt +0 -0
  107. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/protect_code2.pt +0 -0
  108. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/public.key +0 -0
  109. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/public_capsule.zip +0 -0
  110. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/pyarmor-deprecated.py +0 -0
  111. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/pyarmor-webui.py +0 -0
  112. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/pyarmor.py +0 -0
  113. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/pyimcore.py +0 -0
  114. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/pyshield.key +0 -0
  115. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/pyshield.lic +0 -0
  116. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/pytransform.py +0 -0
  117. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/reform.py +0 -0
  118. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/register.py +0 -0
  119. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/sppmode.py +0 -0
  120. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor/utils.py +0 -0
  121. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor.egg-info/SOURCES.txt +0 -0
  122. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor.egg-info/dependency_links.txt +0 -0
  123. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor.egg-info/entry_points.txt +0 -0
  124. {pyarmor-9.0.3 → pyarmor-9.0.5}/pyarmor.egg-info/top_level.txt +0 -0
  125. {pyarmor-9.0.3 → pyarmor-9.0.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.1
2
2
  Name: pyarmor
3
- Version: 9.0.3
3
+ Version: 9.0.5
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
@@ -73,12 +73,17 @@ Please read the [Pyarmor EULA](LICENSE).
73
73
  5. **[Report bugs][issues] following the issue template.**
74
74
  6. **For business and security inquiries, send an email to <pyarmor@163.com>.**
75
75
 
76
+ There are also some third-party learn platforms (not Pyarmor offical)
77
+
78
+ - **[Ask Pyarmor Guru][gurubase], it is a Pyarmor-focused AI to answer your questions**
79
+
76
80
  [faq]: https://pyarmor.readthedocs.io/en/latest/questions.html
77
81
  [issues]: https://github.com/dashingsoft/pyarmor/issues
78
82
  [genindex]: https://pyarmor.readthedocs.io/en/stable/genindex.html
79
83
  [mastertoc]: https://pyarmor.readthedocs.io/en/stable/index.html#table-of-contents
80
84
  [asking]: https://pyarmor.readthedocs.io/en/latest/questions.html#asking-questions-in-github
81
85
  [doc]: https://pyarmor.readthedocs.io/
86
+ [gurubase]: https://gurubase.io/g/pyarmor
82
87
 
83
88
  ## Resources
84
89
 
@@ -105,6 +110,6 @@ Make sure to read the changelog carefully before upgrading Pyarmor:
105
110
 
106
111
  **Full changelogs** at [releases][releases]
107
112
 
108
- **Upcoming features** at [Pyarmor Release Plan](ReleasePlan.md)
113
+ **Upcoming features** at [Pyarmor Release Plan](docs/ReleasePlan.md)
109
114
 
110
115
  [releases]: https://github.com/dashingsoft/pyarmor/releases
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
 
3
- __VERSION__ = '9.0.3'
3
+ __VERSION__ = '9.0.5'
4
4
 
5
5
  logger = logging.getLogger('cli')
6
6
 
@@ -32,7 +32,6 @@ from .shell import PyarmorShell
32
32
  from .plugin import Plugin
33
33
  from .generate import Builder
34
34
  from .bootstrap import check_prebuilt_runtime_library
35
- from .bug import find_solutions
36
35
 
37
36
 
38
37
  def _cmd_gen_key(builder, options):
@@ -344,7 +343,30 @@ def cmd_reg(ctx, args):
344
343
 
345
344
 
346
345
  def cmd_man(ctx, args):
347
- logging.info('This feature is still developing ...')
346
+ from subprocess import check_call, check_output, STDOUT
347
+
348
+ try:
349
+ m = __import__('pyarmor.man')
350
+ except ModuleNotFoundError:
351
+ logger.info('pyarmor.man is still not installed')
352
+ if input('Install it now? (Y/n) ') not in ('Y', 'y'):
353
+ return
354
+ m = None
355
+
356
+ if m is None:
357
+ try:
358
+ logger.info('installing package "pyarmor.man"...')
359
+ check_output([sys.executable, '-m', 'pip',
360
+ 'install', '-U', 'pyarmor.man'],
361
+ stderr=STDOUT)
362
+ logger.info('install package "pyarmor.man" OK')
363
+ except Exception:
364
+ logger.error('install package "pyarmor.man" failed')
365
+ logger.error('please install it manually:')
366
+ logger.error('\tpip install -U pyarmor.man')
367
+ return
368
+
369
+ check_call([sys.executable, '-m', 'pyarmor.man.shell'])
348
370
 
349
371
 
350
372
  def main_parser():
@@ -363,7 +385,7 @@ def main_parser():
363
385
  )
364
386
  parser.add_argument(
365
387
  '-d', '--debug', action='store_true',
366
- help='print debug informations in the console'
388
+ help='generate debug file "pyarmor.debug.log"'
367
389
  )
368
390
  parser.add_argument(
369
391
  '-i', dest='interactive', action='store_true',
@@ -647,19 +669,18 @@ https://pyarmor.readthedocs.io/en/stable/reference/man.html#pyarmor-reg
647
669
 
648
670
 
649
671
  def man_parser(subparsers):
650
- '''Open Pyarmor.Man in web-browser
672
+ '''Start Pyarmor Man shell
651
673
 
652
674
  Pyarmor Man is designed to help Pyarmor users to learn and use
653
675
  Pyarmor, to find solution quickly when something is wrong, to
654
- report bug and ask question by wizard in order to save both
655
- Pyarmor team's and Pyarmor users' time.
676
+ report bug by template in order to save both Pyarmor team's
677
+ and users' time.
656
678
  '''
657
-
658
679
  cparser = subparsers.add_parser(
659
680
  'man',
660
681
  formatter_class=argparse.RawDescriptionHelpFormatter,
661
682
  description=man_parser.__doc__,
662
- help='register Pyarmor or upgrade old Pyarmor license'
683
+ help='start Pyarmor Man shell'
663
684
  )
664
685
 
665
686
  cparser.set_defaults(func=cmd_man)
@@ -667,43 +688,45 @@ def man_parser(subparsers):
667
688
 
668
689
 
669
690
  def log_settings(ctx, args):
670
- if args.debug:
671
- root = logging.getLogger()
672
- root.setLevel(logging.DEBUG)
673
- handler = logging.FileHandler(ctx.debug_logfile,
674
- mode='w',
675
- encoding='utf-8')
676
- handler.setFormatter(logging.Formatter('%(asctime)s %(message)s'))
677
- handler.setLevel(logging.DEBUG)
678
- root.addHandler(handler)
679
-
680
- tracelog = logging.getLogger('trace')
681
- tracelog.propagate = False
682
- tracelog.addHandler(logging.NullHandler())
683
- if ctx.cfg.getboolean('builder', 'enable_trace'):
684
- handler = logging.FileHandler(ctx.trace_logfile,
685
- mode='w',
686
- encoding='utf-8')
687
- handler.setFormatter(logging.Formatter('%(name)-20s %(message)s'))
688
- handler.setLevel(logging.DEBUG if args.debug else logging.INFO)
689
- tracelog.addHandler(handler)
691
+ import logging.config
692
+ logging.config.fileConfig(ctx.default_config)
690
693
 
691
694
  if args.silent:
692
- logging.getLogger().setLevel(100)
695
+ logger.setLevel(logging.ERROR)
696
+
697
+ elif args.debug:
698
+ logger.setLevel(logging.DEBUG)
699
+ logger.handlers[1].setLevel(logging.DEBUG)
700
+
701
+ if ctx.cfg.getboolean('builder', 'enable_trace'):
702
+ level = logging.DEBUG if args.debug else logging.INFO
703
+ logging.getLogger('trace').setLevel(level)
704
+
705
+
706
+ def log_bug(e):
707
+ parser = main_parser()
708
+ args = parser.parse_args(sys.argv[1:])
709
+ ctx = Context(*get_home_paths(args))
710
+ cmdline = ' '.join(sys.argv)
711
+ buglog = logging.getLogger('cli.bug')
693
712
 
713
+ buglog.info('[BUG]: %s\n', e)
714
+ buglog.info('## Command Line\n%s\n', cmdline)
715
+ buglog.info('## Environments', )
716
+ buglog.info('Python %d.%d.%d', *sys.version_info[:3])
717
+ buglog.info('Pyarmor %s', ctx.version_info())
718
+ buglog.info('Platform %s', ctx.pyarmor_platform)
719
+ buglog.info('Native %s', ctx.native_platform)
720
+ buglog.info('Home %s', ctx.home_path)
721
+ buglog.info('')
694
722
 
695
- def log_exception(e):
696
- logger.debug('unknown error, please check pyarmor.error.log')
697
- handler = logging.FileHandler('pyarmor.error.log',
698
- mode='w',
699
- encoding='utf-8')
700
- fmt = '%(process)d %(processName)s %(asctime)s'
701
- handler.setFormatter(logging.Formatter(fmt))
702
- log = logging.getLogger('error')
703
- log.propagate = False
704
- log.addHandler(logging.NullHandler())
705
- log.addHandler(handler)
706
- log.exception(e)
723
+ if not isinstance(e, CliError):
724
+ from traceback import format_exc
725
+ buglog.info('## Traceback\n%s\n', format_exc())
726
+
727
+ # reference/errors.html
728
+ # reference/solutions.html
729
+ # questions.html
707
730
 
708
731
 
709
732
  def print_version(ctx):
@@ -729,14 +752,13 @@ def main_entry(argv):
729
752
  parser = main_parser()
730
753
  args = parser.parse_args(argv)
731
754
 
732
- x, y = sys.version_info[:2]
733
- if not (x == 3 and y > 6 and y < 13):
734
- raise CliError('Python %s.%s is not supported' % (x, y))
735
-
736
755
  ctx = Context(*get_home_paths(args))
737
-
738
756
  log_settings(ctx, args)
739
757
 
758
+ x, y = sys.version_info[:2]
759
+ if not (x == 3 and y > 6 and y < 14):
760
+ raise CliError('Python %s.%s is not supported' % (x, y))
761
+
740
762
  if args.version:
741
763
  print_version(ctx)
742
764
  parser.exit()
@@ -750,6 +772,7 @@ def main_entry(argv):
750
772
 
751
773
  logger.debug('native platform %s', ctx.native_platform)
752
774
  logger.debug('home path: %s', ctx.home_path)
775
+ logger.debug('args: %s', argv)
753
776
 
754
777
  if hasattr(args, 'func'):
755
778
  return args.func(ctx, args)
@@ -758,22 +781,12 @@ def main_entry(argv):
758
781
 
759
782
 
760
783
  def main():
761
- logging.basicConfig(
762
- level=logging.INFO,
763
- format='%(levelname)-8s %(message)s',
764
- )
765
-
766
784
  try:
767
785
  main_entry(sys.argv[1:])
768
- except CliError as e:
769
- logger.error(e)
770
- find_solutions(e)
771
- sys.exit(1)
772
786
  except Exception as e:
773
- log_exception(e)
774
787
  logger.error(e)
775
- find_solutions(e)
776
- sys.exit(2)
788
+ log_bug(e)
789
+ sys.exit(1 if isinstance(e, CliError) else 2)
777
790
 
778
791
 
779
792
  if __name__ == '__main__':
@@ -47,7 +47,7 @@ def check_prebuilt_runtime_library(platnames, extra=None, rtver=''):
47
47
  if current_rtver == rtver:
48
48
  return
49
49
 
50
- pkgver = 'pyarmor.cli.runtime==%s' % rtver
50
+ pkgver = 'pyarmor.cli.runtime~=%s' % rtver
51
51
  logging.info('install "%s" for cross platforms', pkgver)
52
52
  try:
53
53
  return check_call(instcmd + [pkgver])
@@ -73,7 +73,7 @@ def check_prebuilt_runtime_library(platnames, extra=None, rtver=''):
73
73
  pkgnames.remove(entry.name)
74
74
 
75
75
  if pkgnames:
76
- pkgvers = ['pyarmor.cli.core.%s==%s' % (x, corever) for x in pkgnames]
76
+ pkgvers = ['pyarmor.cli.core.%s~=%s' % (x, corever) for x in pkgnames]
77
77
  logging.info('install packages %s for cross platforms', str(pkgvers))
78
78
  try:
79
79
  check_call(instcmd + pkgvers)
@@ -18,7 +18,14 @@
18
18
  # @Author: Jondy Zhao (pyarmor@163.com)
19
19
  #
20
20
  # @Create Date: Tue Mar 12 15:19:41 CST 2024
21
- #
21
+
22
+
23
+ #############################################################
24
+ # #
25
+ # Deprecated since Pyarmor 9, use `pyarmor man` instead #
26
+ # #
27
+ #############################################################
28
+
22
29
  import logging
23
30
 
24
31
  from string import Template
@@ -148,7 +148,7 @@ class Configer(object):
148
148
 
149
149
  if not optvalue:
150
150
  if op is None:
151
- self._clear(sect, optname, local, name)
151
+ self._remove(sect, [optname], local, name)
152
152
  return
153
153
 
154
154
  ctxcfg = ctx.cfg
@@ -301,7 +301,7 @@ class Context(object):
301
301
  return rev
302
302
 
303
303
  licinfo = self.license_info
304
- lictype = 'basic' if licinfo['features'] == 1 else \
304
+ lictype = 'basic' if licinfo['features'] in (1, 17) else \
305
305
  'pro' if licinfo['features'] == 7 else \
306
306
  'group' if licinfo['features'] == 15 else \
307
307
  'ci' if licinfo['features'] == 23 else \
Binary file
Binary file
Binary file
@@ -3,10 +3,10 @@
3
3
  ;; Pyarmor version
4
4
  major = 9
5
5
  minor = 0
6
- patch = 3
6
+ patch = 5
7
7
 
8
8
  ;; Compatible core version
9
- cli.core = 7.6.0
9
+ cli.core = 7.6.2
10
10
 
11
11
  ;; Deprecated since Pyarmor 8.2.5
12
12
  ; cli.runtime = 3.2.5
@@ -18,11 +18,7 @@ timeout = 6
18
18
 
19
19
  regurl = https://api.dashingsoft.com/product/key/enter/%s/?
20
20
  buyurl = https://jondy.github.io/paypal/index.html
21
-
22
- [logging]
23
-
24
- debug_logfile = .pyarmor/pyarmor.debug.log
25
- trace_logfile = .pyarmor/pyarmor.trace.log
21
+ docurl = https://pyarmor.readthedocs.io/{lang}/latest
26
22
 
27
23
  [finder]
28
24
  recursive = 0
@@ -455,3 +451,77 @@ cflags = -O3 -Wno-unsequenced -fno-asynchronous-unwind-tables -fno-unwind-tables
455
451
 
456
452
  [freebsd.x86_64.bcc]
457
453
  cflags = -O3 -Wno-unsequenced -fno-asynchronous-unwind-tables -fno-unwind-tables -fPIC -fno-stack-protector -c
454
+
455
+ ;;;;;;;;;;;;;;;;;;;;;;
456
+ ;;
457
+ ;; Logging settings
458
+ ;;
459
+ ;;;;;;;;;;;;;;;;;;;;;;
460
+ [loggers]
461
+ keys=root,cli,trace,bug
462
+
463
+ [handlers]
464
+ keys=console,trace,debug,bug
465
+
466
+ [formatters]
467
+ keys=console,debug,trace,bug
468
+
469
+ [logger_root]
470
+ handlers=console
471
+
472
+ [logger_cli]
473
+ level=INFO
474
+ handlers=console,debug
475
+ qualname=cli
476
+ propagate=0
477
+
478
+ [logger_trace]
479
+ level=ERROR
480
+ handlers=trace
481
+ qualname=trace
482
+ propagate=0
483
+
484
+ [logger_bug]
485
+ level=INFO
486
+ handlers=bug
487
+ qualname=cli.bug
488
+ propagate=0
489
+
490
+ [handler_console]
491
+ class=StreamHandler
492
+ level=INFO
493
+ formatter=console
494
+ args=(sys.stderr,)
495
+
496
+ [handler_debug]
497
+ class=FileHandler
498
+ level=CRITICAL
499
+ formatter=debug
500
+ args=('pyarmor.debug.log', 'w')
501
+ kwargs={'delay': True}
502
+
503
+ [handler_trace]
504
+ class=FileHandler
505
+ level=DEBUG
506
+ formatter=trace
507
+ args=('pyarmor.trace.log', 'w')
508
+ kwargs={'delay': True}
509
+
510
+ [handler_bug]
511
+ class=FileHandler
512
+ level=INFO
513
+ formatter=bug
514
+ args=('pyarmor.bug.log', 'w')
515
+ kwargs={'delay': True}
516
+
517
+ [formatter_console]
518
+ format=%(levelname)-8s %(message)s
519
+
520
+ [formatter_debug]
521
+ format=%(asctime)s %(message)s
522
+
523
+ [formatter_trace]
524
+ format=%(name)-20s %(message)s
525
+
526
+ [formatter_bug]
527
+ format=%(message)s
@@ -249,6 +249,9 @@ class DarwinUniversalPlugin:
249
249
  def post_build(ctx, inputs, outputs, pack):
250
250
  from shutil import rmtree
251
251
 
252
+ if not ctx.native_platform.startswith('darwin.'):
253
+ return
254
+
252
255
  def rebuild_init(oneplat, init_script):
253
256
  with open(init_script, 'r') as f:
254
257
  lines = f.readlines()
@@ -180,7 +180,7 @@ class Register(object):
180
180
  return parse_token(self.ctx.read_token())
181
181
 
182
182
  def _license_type(self, info):
183
- return 'basic' if info['features'] == 1 else \
183
+ return 'basic' if info['features'] in (1, 17) else \
184
184
  'pro' if info['features'] == 7 else \
185
185
  'group' if info['features'] == 15 else \
186
186
  'ci' if info['features'] == 23 else \
@@ -687,8 +687,8 @@ class WebRegister(Register):
687
687
  f.write(data[n:])
688
688
  self._write_reg_info(filename, data[i:n])
689
689
  else:
690
- # TBD: it should not happened
691
- logger.warning('no REGINFO found')
690
+ # Only for request group token
691
+ logger.debug('no REGINFO found')
692
692
  with open(filename, 'wb') as f:
693
693
  f.write(data)
694
694
  return filename
@@ -21,7 +21,6 @@
21
21
  #
22
22
  import configparser
23
23
  import cmd
24
- import os
25
24
 
26
25
 
27
26
  class PyarmorShell(cmd.Cmd):
@@ -1,6 +1,6 @@
1
1
  from sys import platform
2
2
 
3
- version = '9.0.3'
3
+ version = '9.0.5'
4
4
 
5
5
  # The corresponding version of pytransform.so
6
6
  core_version = 'r52.6'
@@ -1,5 +1,9 @@
1
1
  # Plugins
2
2
 
3
+ ***This document is written for Pyarmor 7***
4
+
5
+ ***All examples in this folder not work in Pyarmor 8+***
6
+
3
7
  Plugin usually is used to extend license type, or insert some extra check code
4
8
  to obfuscated scripts to improve the security.
5
9
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.1
2
2
  Name: pyarmor
3
- Version: 9.0.3
3
+ Version: 9.0.5
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~=7.6.2
@@ -113,7 +113,7 @@ setup(
113
113
  },
114
114
 
115
115
  install_requires=[
116
- 'pyarmor.cli.core~=7.6.0'
116
+ 'pyarmor.cli.core~=7.6.2'
117
117
  ],
118
118
 
119
119
  entry_points={
Binary file
Binary file
Binary file
@@ -1 +0,0 @@
1
- pyarmor.cli.core~=7.6.0
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