2つのpythonファイルを作成します。ディレクトリ/ファイルの関係は次のとおりです。
mytest---
|---mycommon.py
|---myMainDir---
|----myMain.py
Mycommon.py:
def myFunc(a):
...
そしてmyMain.pyで:
import sys
sys.path.append(os.path.join(os.path.dirname(os.path.abspath('__file__')), '..'))
import mycommon.py
mycommon.myFunc("abc")
次に、pyinstallerを使用してexeを作成しました。
pyinstall.py -F mytest\myMainDir\myMain.py
MyMain.exeが作成されますが、実行すると、mycommon
モジュールが見つからないことが通知されます。
PyInstallerの公式マニュアル 説明 この問題:
一部のPythonスクリプトは、PyInstallerが検出できない方法でモジュールをインポートします。例: 、変数データで
__import__()
関数を使用するか、実行時にsys.path
値を操作します。スクリプトにPyInstallerが知らないファイルが必要な場合は、それを手助けする必要があります。
それも suggests そのような場合に何をすべきか:
Analysisがモジュールが必要であることを認識したが、そのモジュールが見つからない場合は、スクリプトが
sys.path
を操作していることが原因であることがよくあります。この場合の最も簡単な方法は、--paths=
オプションを使用して、スクリプトがインポートを検索する可能性のある他のすべての場所を一覧表示することです。
pyi-makespec --paths=/path/to/thisdir --paths=/path/to/otherdir myscript.py
これらのパスは、分析中に現在の
sys.path
に追加されます。
したがって、アプリケーションのビルド時に--paths
引数を指定してください。 -p
引数を指定する手動 states は同等です。
-p dir_list
、--paths=dir_list
インポートされたモジュールの検索パスを設定します(
PYTHONPATH
を使用するなど)。このオプションを使用すると、PyInstallerでコードがインポート用にsys.path
を変更するときに適切な場所を検索できます。;
(Windowsの下)または:
(他のすべてのプラットフォーム)で区切られた1つ以上のパスを指定するか、オプションを指定します検索に複数のパスを与えるために複数回。
また、pyinstallerがサブフォルダーへのpythonスクリプトを正しくインポートするには、サブフォルダーへのパスがsys.path.insertを介して比較的設定されているため、少し戦わなければなりませんでした。
Yoelの答えは私には正しいですが、Windowsでパスを慎重に設定する必要がありました。これが私がしたことです:
私の主なpyは:
D:\_Development\pCompareDBSync\pCompareDBSync\pCompareDBSync.py
私のインポートされたpyは:
D:\_Development\pCompareDBSync\pCompareDBSync\py\pCompareNVR.py
(私はフォルダ。\ py \にそのようなインポートされたpyの多くを持っていますが、ここでは例として1つだけ使用します)
私の主なPYには、次のものが含まれます。
sys.path.insert(0, 'py')
try:
from pCompareNVR import fgetNV_sN_dict
from pCompareNVR import findNVRJobInDBSync
from pCompareNVR import getNVRRecords
from pCompareNVR import saveNVRRecords
from pCompareNVR import compareNVRs
except Exception as e:
print('Can not import files:' + str(e))
input("Press Enter to exit!")
sys.exit(0)
pyinstaller --onefile pCompareDBSync.py
-> py/pCompareNVR.pyを含まないpCompareDBSync.exe
メインPYとインポートされたPYに絶対パッドを含める必要がありました。
pyinstaller --onefile --paths=D:\_Development\pCompareDBSync\pCompareDBSync\ --paths=D:\_Development\pCompareDBSync\pCompareDBSync\py pCompareDBSync.py
-> py/pCompareNVR.pyが含まれていたpCompareDBSync.exe-> OK
そして、それは私のためにこの問題を解決しました!