2017-12-02 6 views
8

세 개의 스크립트가 있다고 가정 해 보겠습니다. Main.py (모든 가져 오기 가능), 1.py (임의의 스크립트), 2.py (임의의 스크립트).선택 위치에서 파이썬 모듈 가져 오기

pyinstaller -F --onedir Main.py (80mb) 
pyinstaller -F --onedir 1.py (80mb) 
pyinstaller -F --onedir 2.py (80mb) 

이렇게하면 3 개의 폴더가 만들어집니다. 그런 다음 모든 종속성이있는 기본 폴더에 1.exe와 2.exe를 복사하면 정상적으로 실행됩니다.

image

두 가지 문제가 존재한다 :

문제는 크기입니다. 하나의 파일은이 크기를 30MB로 줄이고 한 폴더는 80MB로 유지합니다.

더 중요한 것은 exe에서 해당 폴더를 벗어날 수 없다는 것입니다. 나는 Python에서 단축키를 사용해야했다.

다음은 this이며, 이는 일시적인 해결책 일 것입니다.

제 질문은 Pyinstaller를 사용하여 선택한 위치에서 가져 오기를 읽으면 어떻게 실행 파일을 이동할 수 있습니까?

논리 : 컴파일 Main.py pyinstaller -F –onefile Main.py (15mb).

C:\13에서 C:\13\Main.exe

링크 모든 exe ​​인의 같은 C:\13\ 너무 EXE 외모에 폴더를 만들고 사용하고 계십니까? --runtime-tmpdir PATH

exe ​​또는 "one dir" 폴더에서 가져 오기에 대한 문서를 찾는 데 어려움을 겪고 있습니다. 도착지에서 수입을 얻는 데는 많은 것이 있지만 선택 위치에서 수입을 얻는 데 그다지 도움이되지 않으므로 어디서나 exe를 실행할 수 있습니다. 게다가 pyinstaller에서 모듈을 디 컴파일하는 것이 부족하다는 것을 혼란에 더하는 것이 어렵습니다. 아마도

...

pyinstaller -F --runtime-tmpdir C:\13 --onefile 2.py 

pyinstaller -F --runtime-tmpdir C:\13 --onedir 3.py 

어떤 디렉토리가 만들어집니다 나를 위해 비록. 선택한 위치에서 가져 오기를 가져 오는 방법은 무엇입니까?

또 다른 solution 수 :

+0

pyinstaller의 설명서에는 https://pyinstaller.readthedocs.io/en/stable/spec-files.html#multipackage-bundles –

+0

@FlorentB와 같은 종속성을 공유하는 여러 exe를 패키지하는 방법에 대한 자세한 장이 있습니다. "이 기능은 PyInstaller 3.0 릴리스에서 작동하지 않습니다." –

답변

0

나는 같은 문제를 가지고 당신이 image에서 볼 수 있듯이 비록, 우리가 팬더가 선택할 수있는 몇 개의 파일이 있습니다 원 말할 수 있어요
if getattr(sys, 'frozen', False): 
     os.path.join(sys._MEIPASS, "C:\aa") 

... Pyinstaller가 버전 3.0으로 전환했을 때 Nuitka이 해결했습니다.

이 "DLL"에서 필요한 모든 패키지를 가져올 것이다 1.py2.py에 대한 귀하의 .pyd lib 디렉토리 파일에 Main.py 다음 만들 실행 파일을 묶을 수 있습니다. 따라서 lib 파일을 특정 위치에 넣고 실행 파일을 실행하기 직전에 PYTHONPATH을 설정할 수 있습니다 (예 : 배치 파일 또는 직접 쉘 구성).

+0

나는 과거 Nuitka를 사용 했었고 설정하는 데 혼란스럽고 버그가있었습니다. 나는 하루 종일 재미있는 것이 아니고 문제에 관한 약간의 문서화 된 오류의 끝없는 배열을 보냈다. 더 깊이있는 가이드를 제공 할 수 있다면 다른 사람들이이 혜택을 누릴 수 있다고 생각합니다. Python에 훌륭한 문서가 있기 때문에 마음이 굳어졌습니다. "Nuitka"를 사용하면 xD가 도움이되지 않습니다. –

0

본인은이 문제를 조사하고, 솔루션은 내가 onefile 사용

후 나는 대답을 할 here를 발표이 기능이 현재 고장으로 불가능하다 생각했다.

내 첫 번째 문제인 UPX 및 가상 디렉터리를 해결합니다. 그런 다음 마지막으로 모든 파일을 하나의 디렉토리에 저장합니다. 마지막으로 그림 에서처럼 exe 파일을 폴더에 넣으면 파일 크기가 줄어들 것입니다.

파이썬 스크립트를 통해 바로 가기를 만들 수 있습니다 (아직 문제가있는 경우).하지만 실제 필요는없고 실행 파일을 모두 실행하는 것이 하나의 폴더에서 발견되었습니다. 그들은 미래에 onefile을 고칠 수도 있지만, 나는이 솔루션에 만족하고 있습니다.

결과 : 작은 파일.

이러한 exe는 내가 원하는 곳에서 실행할 수 있습니까? 안타깝게도 멀티 팩키지가없는 번들은 고장났습니다. 당신은 단축키를 만들 수 있습니다 생각하지만 내가 생각했던 것만 큼 나쁘지는 않습니다. 그들은 미래에 그것을 고칠 수는 있지만, 의미있는 시간에이 솔루션은 얻을 수있는만큼 좋은 것입니다. 내가 틀렸다면 나를 바로 잡아라. 그러나 나는이 해결책에 만족한다.