11

私は単一の実行可能ファイルを作成しようとしてきましたが、近づいています。PyInstaller の使用をお勧めしないでください。そのルートを試し、SO hereで質問し、チケットを入れました。それは近いですが、完全には機能していません。私は現在py2exeを試していますが、非常に近いです。pyinstaller では、リソース ファイルを作成できます (これにより、含まれているファイルを使用して実行可能ファイルがビルドされます。その後、一時フォルダーでこれらにアクセスできます)。

py2exeでも同じことをしたい。実行可能ファイルは 1 つですが、追加のフォルダーが 5 つ (maps、mpl-data、data、pics、および tcl) あります。私はこの質問を見たことがありますが、それを理解することも、機能させることもできないようです。私のメインのpyファイルでPersistentDict(filepath)は、ファイルへのパスが必要な場所を使用しています。

私の質問は 2 つの部分です。 1. ファイル (以下のデータ ファイル) を実行可能ファイルにパッケージ化するにはどうすればよいですか。2. コードでこれらのファイルにアクセスし、/temp/file1.jpg などのパスを (文字列として) 返すにはどうすればよいですか。

これが私のpy2exeセットアップファイルのコードです。matplotlibがあり、実行可能ファイルにmpl-dataを正しく含める必要があることに注意してください。ありがとう!

from distutils.core import setup 
import py2exe 
import shutil
import glob 
import matplotlib,six

opts = {'py2exe': { "includes" : ["matplotlib.backends",
                                  "matplotlib.backends.backend_qt4agg",
                                  "matplotlib.figure","numpy",
                                  "six",
                                  "mpl_toolkits.basemap", 
                                  "matplotlib.backends.backend_tkagg"], 
                     'excludes': ['_gtkagg', '_tkagg','_agg2','_cairo',
                                  '_cocoaagg', '_fltkagg', '_gtk', '_gtkcairo', 'tcl' ], 
                 'dll_excludes': ['libgdk-win32-2.0-0.dll','w9xpopen.exe', 
                                 'libgobject-2.0-0.dll'],
                    'bundle_files': 1,
                    'dist_dir': "Dist Folder",
                    'compressed': True,
              } 
       }

data_files = [(r'mpl-data', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\*.*')),
              (r'mpl-data', [r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\matplotlibrc']), 
              (r'mpl-data\images',glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\images\*.*')), 
              (r'mpl-data\fonts',glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\fonts\*.*')),
              (r'mpl-data\data', glob.glob(r'C:\Python27\Lib\site-packages\matplotlib\mpl-data\data\*.*')),
              ('data', ['C:\\Users\\Me\\Documents\\Example_Json_File.json']),
              ('pics', ['C:\\Users\\Me\\Documents\\Example_Icon.ico',
                        'C:\\Users\\Me\\Documents\\Example_Jpg.jpg',
                        ])]


setup(windows=[{"script" : "MyMainScript.py",
                "data_files" : data_files,
                "icon_resources": [(1, 'C:\\Users\\Me\\Documents\\Example_Icon.ico')]}, ],

                version = "1.0", 
                options=opts,
                data_files=data_files,
                zipfile = None,
      ) 
4

2 に答える 2

4

Guy hereは、py2exe を使用して 1 つのファイルにパッケージ化する方法を説明しています。彼のセットアップでは、実行可能ファイル内にリソースもパッケージ化されていません。

アプリをパッケージ化するとき、1 つの実行オプションを使用しない

options = {"py2exe": {'bundle_files': 1, 'compressed': True}},

それらをlibrary.zipに入れることすら気にしません

options = {"py2exe": {"skip_archive":0}}

1つのディレクトリに多数のpyc、データファイル、dllなどを配置するだけです。次に、NSIS または Inno セットアップを使用してインストーラーを作成します。一部のアプリはサービスとして実行する必要があるため、Inno がその処理を担当しました。そのアプローチの最大の利点は、元のパスとは異なる、ファイルへの「凍結」パスを処理する必要がないことです。

それ以外の場合は、フリーズしたパスを検出するためにコードを変更する必要がある場合があります。たとえば http://www.py2exe.org/index.cgi/WhereAmI

于 2013-11-13T19:21:22.140 に答える