使用Python setuptools制作的应用程序已安装,但赢得了';t从桌面快捷方式启动

使用Python setuptools制作的应用程序已安装,但赢得了';t从桌面快捷方式启动,python,python-2.7,setuptools,conda,Python,Python 2.7,Setuptools,Conda,我有一个GUI应用程序,另一位开发人员写道,我正在尝试将其转换为一个conda软件包,该软件包将在桌面上安装一个桌面图标,用户可以无缝启动该图标 下面是我可以共享的文件夹结构和代码: Documents/ └── project/ ├── bld.bat ├── meta.yaml ├── setup.py ├── setup.cfg └── mygui/ ├── MainGUI.py ├── __init__.py

我有一个GUI应用程序,另一位开发人员写道,我正在尝试将其转换为一个conda软件包,该软件包将在桌面上安装一个桌面图标,用户可以无缝启动该图标

下面是我可以共享的文件夹结构和代码:

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

python setup.py install install_shortcuts
if errorlevel 1 exit 1
Documents\project\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='me@myemail.com',
    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']
)
Documents\project\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
Documents\project\mygui\uuuuuuu main\uuuuuuuuuuuuuu.py:

from MainGUI import main

if __name__ == '__main__':
    main()
最初的GUI开发人员在一个块中有一个代码块,如下所示:

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

但是我的同事得到了相同的结构,但他也得到了一个名为
Lib/site packages/mygui/
的目录,例如,它包含.py和.pyc文件和目录中的源代码。为什么我的软件包没有获得这些源文件,这可能是我的应用程序无法启动的原因吗?我也没有看到我在setup.py文件(即*.ico文件)中指出的任何数据文件。

我终于能够制作这个应用程序,它将在桌面上安装快捷方式并包含源代码

问题在于进口。由于原始源代码是多年前编写的,所以它们没有绝对的导入

我必须通过检查确保

from __future__ import (
    unicode_literals,
    print_function,
    division,
    absolute_import
)
位于进行导入的每个文件的顶部,然后还将相对导入更改为绝对导入。然而,在root
\uuuu init\uuuu.py
文件中,我保留了相对导入。哦,另外一件我做错了的事是,在我的
setup.py的一个版本中,我包含了这四个导入。不要这样做,否则python会抱怨unicode_文本。我只是把它忘在setup.py之外,一切都很好

要调试conda包并查找更多导入错误,我将执行以下操作:

  • 通过运行
    \uuuu main\uuuuu.py
    测试PyCharm中的代码
  • 如果成功的话,我将构建conda包
  • 安装conda软件包
  • 在命令窗口中,我将运行
    python“C:\Miniconda2\envs\myenv\Scripts\MyApp script.pyw”
    。这将给我下一个PyCharm没有的错误
  • 我将返回到源代码,进行必要的更改并重复步骤1-4,直到程序从桌面图标启动

    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
    
    from __future__ import (
        unicode_literals,
        print_function,
        division,
        absolute_import
    )