2016-12-25 52 views
5

Tôi đang cố gắng sử dụng PyInstaller để tạo một ứng dụng OSX độc lập chạy GUI mà tôi đã tạo. Khi tôi bước vào sau trong terminal của tôi:Lỗi khi sử dụng PyInstaller

pyinstaller gui.py 

Tất cả mọi thứ dường như làm việc cho đến khi tôi nhận được lỗi sau:

File "/Users/username/anaconda/bin/PyInstaller", line 11, in <module> 
    sys.exit(run()) 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/__main__.py", line 90, in run 
run_build(pyi_config, spec_file, **vars(args)) 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/__main__.py", line 46, in run_build 
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs) 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/building/build_main.py", line 788, in main 
build(specfile, kw.get('distpath'), kw.get('workpath'), 
kw.get('clean_build')) 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/building/build_main.py", line 734, in build 
exec(text, spec_namespace) 
File "<string>", line 16, in <module> 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/building/build_main.py", line 212, in __init__ 
self.__postinit__() 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/building/datastruct.py", line 178, in __postinit__ 
self.assemble() 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/building/build_main.py", line 470, in assemble 
module_hook.post_graph() 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/building/imphook.py", line 409, in post_graph 
self._load_hook_module() 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/building/imphook.py", line 376, in 
_load_hook_module 
self.hook_module_name, self.hook_filename) 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/hooks/hook-PyQt4.py", line 33, in <module> 
(qt_menu_nib_dir('PyQt4'), ''), 
File "/Users/username/anaconda/lib/python2.7/site- 
packages/PyInstaller/utils/hooks/qt.py", line 125, in qt_menu_nib_dir 
""".format(namespace, path)) 

Exception: 
      Cannot find qt_menu.nib for PyQt4 
      Path checked: 
    /Users/felipe/miniconda/envs/_build/lib/QtGui.framework/Resources/qt_menu.nib 

Mà dường như kỳ lạ, vì tên của tôi không Felipe!

Tôi có một vài câu hỏi:

1) Làm cách nào để có thư mục có tên felipe trên máy tính của tôi? (Tôi đã sử dụng anaconda để cài đặt qt, tôi không biết liệu điều đó có liên quan gì không?)

2) Cho đến khi tôi nhận được thông báo lỗi, PyInstaller đang tìm trong thư mục chính xác. Tại sao nó bắt đầu tìm kiếm trong thư mục mơ hồ này (mơ hồ với tôi là) mà tôi không biết?

3) Tôi là một người mới làm quen với các thư mục và tôi không thể tìm thấy felipe mister ở bất cứ đâu trên máy tính của mình. Khi tôi nhìn vào thư mục Người dùng, tôi chỉ thấy người dùng của riêng tôi và một thư mục "Chia sẻ" trống. (Tôi không biết thư mục dùng chung là gì và tại sao nó lại ở đó.)

4) Dựa trên những gì tôi đọc trên internet, tôi đã sao chép qt_menu-nib vào thư mục có kịch bản được bật vào một độc lập nằm. Tôi nên làm gì để tạo thành công độc lập từ đây?

+0

Tôi xin lỗi nhưng tôi không nghĩ rằng tôi hoàn toàn hiểu quan điểm của bạn. Ý của bạn là gì khi bạn nói pyinstaller cần thiết lập các yêu cầu hệ điều hành của tôi trước? – titusAdam

+0

Bạn có thể chỉ rõ ràng và đưa ra câu trả lời đầy đủ không? Tôi không biết bạn đang nói về cái gì. Tôi không phải là một chuyên gia, như tôi đã đề cập trong câu hỏi của tôi! – titusAdam

+1

cũng nhận thấy một sự nhầm lẫn 'anaconda' vs' miniconda' - hoặc có một liên kết tượng trưng xấu ở đâu đó (ví dụ: '/ Users/username/anaconda ->/Users/felipe/minoconda') hoặc cài đặt pyQt của bạn đã được" biên dịch " trên một số máy tính khác (được cài đặt dưới dạng bánh xe) và đường dẫn của máy tính đã được chuyển sang. Trong trường hợp sau, hãy thử 'pip install --no-cache-dir/- no-wheel/- force-reinstall /' pyqt từ đầu. –

Trả lời

4

Trước hết, bạn gặp phải sự cố đã biết giữa PyInstaller và Anaconda: PyInstaller issue #2135. Cuộc hội thoại chứa câu trả lời cho câu hỏi của bạn.

1) Đường dẫn được mã hóa cứng trong mã nhị phân Qt sai được cung cấp bởi Anaconda, xem comment from mrady3.

2) PyInstaller tải Qt4-specific hook để tìm tài nguyên (qt_menu.nib) cần thiết để chạy ứng dụng đích. Mã móc cố gắng lấy vị trí của thư mục tài nguyên từ chính bản thân Qt. Qt nhị phân trả về sai/hardcoded/đường dẫn, và sau đó quá trình thất bại.

3) Xem điểm 1), đó là thư mục trên máy của người bảo trì. Qt giả định rằng đường dẫn cài đặt của nó được thiết lập trước khi xây dựng; Kho lưu trữ Anaconda lưu trữ một tệp nhị phân được biên dịch với một đường dẫn cài đặt khác.

4) Có thể có nhiều cách tiếp cận có thể:

Hãy thử cài đặt phiên bản phát triển của PyInstaller từ nguồn khác nhau, nó có some fixes for the above-mentioned issue. Sau đó, thử xây dựng lại ứng dụng:

git clone https://github.com/pyinstaller/pyinstaller.git 
cd pyinstaller 
/Users/username/anaconda/bin/python setup.py sdist 
conda install dist/PyInstaller-3.3.dev0.tar.bz2 

Cài đặt Qt4 sử dụng homebrew. biên soạn địa phương sẽ mất một thời gian dài:

brew install cartr/qt4/qt 
find /usr/local/Cellar/qt -name qt_menu.nib 

Sửa Qt4 móc tại /Users/username/anaconda/lib/python2.7/site- packages/PyInstaller/hooks/hook-PyQt4.py và thay thế cuộc gọi đến qt_menu_nib_dir('PyQt4') với đường dẫn từ cài đặt homebrew ('/usr/local/Cellar/qt/4.8.7_3/lib/QtGui.framework/Versions/4/Resources/qt_menu.nib').

Hoặc cách khác, chỉ cần đặt qt_menu.nib vào vị trí mong đợi:

sudo mkdir -p /Users/felipe/miniconda/envs/_build/lib/QtGui.framework/Resources/ 
sudo ln -s /usr/local/Cellar/qt/4.8.7_3/lib/QtGui.framework/Versions/4/Resources/qt_menu.nib /Users/felipe/miniconda/envs/_build/lib/QtGui.framework/Resources/