gpt4 book ai didi

python - 像 spyder 那样打包一个 python 应用程序

转载 作者:太空狗 更新时间:2023-10-29 16:56:46 28 4
gpt4 key购买 nike

我有一个开源 python 软件 ( GridCal ),它有一个用 PyQt5 制作的图形用户界面。该程序可通过 pip 安装 pip3 install GridCal

我想知道我必须做什么才能当有人 pip 安装我的程序时,它出现在系统菜单上就像安装 Spyder 时一样( Python IDE)

到目前为止,我能提供的只是我程序的setup.py,但我不知道它是否相关。

from distutils.core import setup
import sys
import os

name = "GridCal"

# Python 2.4 or later needed
if sys.version_info < (3, 5, 0, 'final', 0):
raise (SystemExit, 'Python 3.5 or later is required!')

# Build a list of all project modules
packages = []
for dirname, dirnames, filenames in os.walk(name):
if '__init__.py' in filenames:
packages.append(dirname.replace('/', '.'))

package_dir = {name: name}

# Data_files (e.g. doc) needs (directory, files-in-this-directory) tuples
data_files = []
for dirname, dirnames, filenames in os.walk('doc'):
fileslist = []
for filename in filenames:
fullname = os.path.join(dirname, filename)
fileslist.append(fullname)
data_files.append(('share/' + name + '/' + dirname, fileslist))

setup(
# Application name:
name=name,

# Version number (initial):
version="1.025",

# Application author details:
author="Santiago Peñate Vera",
author_email="santiago.penate.vera@gmail.com",

# Packages
packages=packages,

data_files=data_files,

# Include additional files into the package
include_package_data=True,

# Details
url="http://pypi.python.org/pypi/GridCal/",

# License file
license="LICENSE.txt",

# description
description="Research Oriented electrical simulation software.",

# long_description=open("README.txt").read(),

# Dependent packages (distributions)
install_requires=["numpy",
"scipy",
"networkx",
"pandas",
"xlwt",
"xlrd",
"PyQt5",
"matplotlib",
"qtconsole"
],
)

最佳答案

您可以在第 77 行的 setup.py 脚本中找到 spyder-ide 如何实现此功能,代码如下:

def get_data_files():
"""Return data_files in a platform dependent manner"""
if sys.platform.startswith('linux'):
if PY3:
data_files = [('share/applications', ['scripts/spyder3.desktop']),
('share/pixmaps', ['img_src/spyder3.png'])]
else:
data_files = [('share/applications', ['scripts/spyder.desktop']),
('share/pixmaps', ['img_src/spyder.png'])]
elif os.name == 'nt':
data_files = [('scripts', ['img_src/spyder.ico',
'img_src/spyder_reset.ico'])]
else:
data_files = []
return data_files

然后它在 setup() 实例的常规 data_files 设置中被调用。

它的作用是指示安装程序复制所需的文件以在其各自的文件夹中创建一个菜单项。 [0]

在linux系统中你需要创建一个appName.desktop文件,这些文件通常位于/usr/share/applications/usr/local/share/applications 用于系统范围内安装的应用程序,或 ~/.local/share/applications 用于用户特定的应用程序 [1] .

文件结构如下所示(不言自明,可以在上面的引用链接中找到对更多键的引用):

[Desktop Entry]
Version=1.0
Terminal=false
Type=Application
Name=AppName
Exec=/path/to/executable
Icon=/path/to/icon
Categories=Graphics;2DGraphics;Development;
Comment=Tooltip comment appears when you hover on menu icon.

您可以选择将您的应用程序图标放在任何地方并使用其完整路径,或者简单地放在 share/pixmaps/ 下并仅通过其文件名引用它。

请注意,在指定要安装的 .desktop 和图标文件的位置时,脚本不使用完整路径,这是因为这些位置将相对于当前的 sys.exec_prefix默认为 /usr/local/ [2]

在windows上你需要在~\Windows\Start Menu\Programs目录下创建一个.lnk(二进制文件),我无法详细解释它是如何工作的(不是 windows 程序员),因为他们编写了一个完整的安装后脚本来处理为 windows 制作菜单快捷方式 [3] .

Windows 安装后脚本的一些说明:
似乎实现其执行的机制已从 spyder-ide 的 setup.py 文件中删除,所以你们所有人都在挖掘它是如何工作的,除非你检查文件历史记录,以消除混淆,这是您可以执行的操作(不是 spyder-ide 方式):

  • 创建自定义命令 PostInstallCommand 并通过将其添加到 cmdclass 属性来指示 setup() 运行它,如下所示 cmdclass ={'install': PostInstallCommand} 检查this answer for detailed instructions

在将 PostInstallCommand 附加到您的 cmdclass 属性之前,不要忘记检查操作系统,您不会希望在您的 linux 环境中执行它。

希望这对您有所帮助!

关于python - 像 spyder 那样打包一个 python 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41960098/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com