2017-06-20 19 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,直到程序从桌面图标启动。

相关问题