2017-06-20 18 views
0

我有一個GUI應用程序,另一個開發人員寫道:我想變成一個暢達包將安裝用戶可以隨後推出的桌面上桌面圖標無縫連接。應用程序與Python的setuptools安裝製作,但不會從桌面啓動快捷方式

下面的文件夾結構和代碼,我可以分享:

Documents/ 
└── project/ 
    ├── bld.bat 
    ├── meta.yaml 
    ├── setup.py 
    ├── setup.cfg 
    └── mygui/ 
     ├── MainGUI.py 
     ├── __init__.py 
     ├── __main__.py 
     └── images/ 
      └── icon.ico 

的文檔\項目\ bld.bat:

python setup.py install install_shortcuts 
if errorlevel 1 exit 1 

的文檔\項目\ meta.yaml:

package: 
    name: mygui 
    version: 1.2.3 

source: 
    path: ./ 

build: 
    number: 1 
    string: py{{ CONDA_PY }}_{{ ARCH }} 

requirements: 
    build: 
    - python 2.7.13 
    - pyvisa 1.4 
    - setuptools 
    - setuptools-shortcut 
    - pydaqmx 
    - pmw 
    - matplotlib 
    - pyserial 
    - pil 

    run: 
    - python 2.7.13 
    - pyvisa 1.4 
    - pydaqmx 
    - pmw 
    - matplotlib 
    - pyserial 
    - pil 

about: 
    license: 
    summary: My GUI application 

Documents \ project \ setup.py:

from setuptools import setup, find_packages 

setup(
    name='mygui', 
    version='1.2.3', 
    author='Me', 
    author_email='[email protected]', 
    description=(
     "An App I wrote." 
    ), 
    long_description="Actually, someone else wrote it but I'm making the conda package.", 
    packages=find_packages(), 
    package_data={ 
     'mygui': ['images/*ico'], 

    }, 
    entry_points={ 
     'gui_scripts': [ 
      'MyApp = mygui.__main__:main' 
     ], 
    }, 
    install_requires=['pyvisa==1.4', 'pmw', 'pydaqmx', 'matplotlib', 'pyserial', 'pil'] 
) 

的文檔\項目\ setup.cfg:

[install] 
single-version-externally-managed=1 
record=out.txt 

[install_shortcuts] 
iconfile=mygui/images/icon.ico 
name=MyApp 
group=My Custom Apps 
desktop=1 

的文檔\項目\ mygui__main __潘岳:

from MainGUI import main 

if __name__ == '__main__': 
    main() 

原來的GUI開發人員必須在去像塊的代碼塊:

if __name__ == '__main__': 
    <code here> 

,所以我把所有的代碼會在哪裏,並把它剪切/粘貼到:

def main(): 
    <code here> 

if __name__ == '__main__': 
    main() 

所有MainGUI.py文件中。我無法分享代碼的細節。但它的工作原理如下所述。

當我在PyCharm中打開我的代碼,並在meta.yaml文件中列出的所有軟件包在conda環境中運行或調試時,應用程序工作得很好,沒有任何警告或錯誤。然而,當我運行conda build,上傳到蟒蛇通道,然後在機器上安裝,桌面圖標被創建,但是當我點擊它的應用程序將無法運行。

有什麼錯在我的設置文件?我該如何調試應用程序失敗的原因?我沒有看到任何命令窗口或任何類型的輸出,PyCharm也不會抱怨,所以它一定是應用程序創建後的東西。

更新:這是我第一次創建conda軟件包,它將自己安裝爲這樣的應用程序,並且我使用了一個同事的setup.py文件作爲模板。我很好奇他是否在他的一個項目中創建的conda軟件包與我的conda-build中出現的conda軟件包在結構上不同。如果我採取tar.bz文件並解壓,這是我得到的結構:

mygui-1.2.3-py27_32/ 
├── info/ 
    ├── about.json 
    ├── files 
    ├── has_prefix 
    ├── index.json 
    └── paths.json 
├── Lib/ 
    └── site-packages 
     └── mygui-1.2.3-py2.7.egg-info 
      ├── dependency_links.txt 
      ├── entry_points.txt 
      ├── PKG-INFO 
      ├── requires.txt 
      ├── SOURCES.txt 
      └── top_level.txt 
├── Menu/ 
    ├── mygui.ico 
    └── mygui_menu.json 
└── Scripts/ 
    ├── MyApp.exe 
    ├── MyApp.manifest 
    └── MyApp.pyw 

但我的同事得到了相同的結構,但他也得到了一個名爲Lib/site-packages/mygui/,例如目錄,其中包含源代碼在.py和.pyc文件和目錄中。爲什麼我的軟件包沒有得到這些源文件,這可能是我的應用程序無法啓動的原因?我也看不出有任何的,我在我的setup.py文件已經表明我的數據文件(* .ico文件)

回答

0

我終於能夠得到這個程序做它會安裝上的快捷方式桌面幷包含源代碼。

問題出在進口。由於原始源代碼是在YEARS之前編寫的,因此它們沒有absolute_imports。

我不得不去通過,並確保

from __future__ import (
    unicode_literals, 
    print_function, 
    division, 
    absolute_import 
) 

在那個國產進口,然後又改變相對進口絕對導入每個文件的頂部。但是,在根文件__init__.py中,我留下了相對的導入。哦,另一件我做錯的事情是,在我的setup.py的一個版本中,我包含了這四個進口。不要這樣做,否則python會抱怨unicode_literals。我剛剛將它從setup.py中刪除,並沒有問題。

要調試康達包裝和發現更多的導入錯誤我會做到以下幾點:

  1. 測試運行__main__.py在PyCharm的代碼。
  2. 如果工作,我會建立conda包。
  3. 安裝conda包。
  4. 在命令窗口中,我將運行python "C:\Miniconda2\envs\myenv\Scripts\MyApp-script.pyw"。這會給我PyCharm沒有的下一個錯誤。

我會返回源代碼,進行必要的更改並重復步驟1-4,直到程序從桌面圖標啓動。

相關問題