2016-11-09 26 views
19

私はこれまでのところ、私はこのシンプルな構造だ、pyInstallerの持つダイナミック/非表示の輸入をロードする方法を把握しようとしている:すべての動的PythonモジュールをPyInstallerの仕様に追加するには?

まず、私はd:\Sources\personal\python\framework

で私PYTHONPATHの生活の中にフレームワークパッケージを追加しました

そのパッケージが私のpythonのプロジェクトの多くで使用され、特に、それは私が

Main project 

├───data  <- Pure static data 
├───plugins  <- Dynamic modules which uses framework's modules          
├───resources <- Static data+embedded (generated by pyqt), used by plugins 
│ ├───css            
│ ├───images      
| resources.py 
| resources.qrc      
main.py   <- Uses framework's modules to load plugins dynamically 

マイspecファイルをパッケージ化する単純なプロジェクトの下にこのようになりますで使用しています

  • 問題は、私が分析(...、hiddenimports = []、...)さんhiddenimportsリストに隠された輸入品を追加しようとすると、私はこれまでのところ、これを試してみた来ます

    hiddenimports=['d:\\sources\\personal\\python\\pyqt\\plugins']
  • hiddenimports=['d:\\sources\\personal\\python\\pyqt\\plugins\\*']
  • hiddenimports=['plugins']

はまた、絶対パスを持つなど、個々のファイルを一覧表示しようとしましたまた

hiddenimports=[ 
    'd:\\sources\\personal\\python\\pyqt\\pyshaders\\plugins\\api.py', 
    'd:\\sources\\personal\\python\\pyqt\\pyshaders\\plugins\\config.py', 
    'd:\\sources\\personal\\python\\pyqt\\pyshaders\\plugins\\plugins_actions.py', 
    'd:\\sources\\personal\\python\\pyqt\\pyshaders\\plugins\\plugins_dialogs.py', 
    'd:\\sources\\personal\\python\\pyqt\\pyshaders\\plugins\\plugins_docks.py', 
    'd:\\sources\\personal\\python\\pyqt\\pyshaders\\plugins\\plugins_post_init.py', 
    'd:\\sources\\personal\\python\\pyqt\\pyshaders\\plugins\\plugins_toolbar.py' 
] 

とは

hiddenimports=[ 
    'plugins.api', 
    'plugins.config', 
    'plugins.plugins_actions', 
    'plugins.plugins_dialogs', 
    'plugins.plugins_docks', 
    'plugins.plugins_post_init', 
    'plugins.plugins_toolbar' 
] 

はまた、これらの試みの

hiddenimports=collect_submodules('plugins') 

なしに働いていないcollect_submodulesとフォルダのプラグインのISN」をしようとしたモジュールパッケージとして(プラグインフォルダ内__init__.py生活を)それらをロードしようとしましたpyinstallerがこれらの隠しプラグインによって使用されるインポートを分析して、依存関係を再帰的に分析して* .pycファイルをコピーすると思います)...だから、私はどのようにして私は広告することができますd pyinstallerの仕様に動的にロードされている適切な "隠された"モジュール。

+0

['TOC']を使って[' 'pure''(https://pythonhosted.org/PyInstaller/spec-files.html#spec-file-operation)依存関係のファイルを追加することができます(https: //pythonhosted.org/PyInstaller/advanced-topics.html#toc-class-table-of-contents)。 – Repiklis

+0

おそらくこの(https://github.com/pyinstaller/pyinstaller/issues/2009)の問題に当たっていますか? –

+0

PyInstallerフック(https://pyinstaller.readthedocs.io/en/stable/hooks.html)を使ってみましたか?それらはその目的のために設計されています。 – void

答えて

1

私は、Py2ExeでPyQtアプリケーションをパッキングする問題を抱えていました(私はPyInstallerとcx_freezeにも苦労しましたが、py2exeだけが役に立ちました)。

詳細はsolutionです。私はそれらを明示的に次のように追加しました。

data_files += [('source', glob('source/*.py'),)] 
setup(
     data_files=data_files, 
     .... # other options 
     windows=[ 
     { 
      "script": "launcher.py", 
      "icon_resources": [(0, "resources/favicon.ico")] 
     } 
    ) 

次に、それらをインポートして呼び出します。 このアプローチが役立つことを願っています。

関連する問題