使用Python setuptools制作的应用程序已安装,但赢得了';t从桌面快捷方式启动
我有一个GUI应用程序,另一位开发人员写道,我正在尝试将其转换为一个conda软件包,该软件包将在桌面上安装一个桌面图标,用户可以无缝启动该图标 下面是我可以共享的文件夹结构和代码:使用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
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
)