【发布时间】:2019-01-17 07:33:17
【问题描述】:
我知道这是一个非常简单和广泛的问题,但我没有多少时间,所以我不得不问。我创建了一个接口来进行一些 GIS 计算,并为此在后端的库中使用。
import osmnx as ox, networkx as nx, geopandas as gpd, pandas as pd
from shapely.geometry import LineString, Point
from fiona.crs import from_epsg
import branca.colormap as cm
import folium
from folium.plugins import MarkerCluster
import pysal as ps
这些用于前端
import tkinter as tk
from tkinter import ttk
from tkinter.filedialog import askopenfilename, asksaveasfilename,
askdirectory
import backend as bk
我正在尝试使它成为一个可执行程序,并且我已经尝试过 PyInstaller,但由于依赖关系它没有工作。 PyInstaller有什么办法吗?或任何其他图书馆?或者我该怎么办?
ps:我使用的是 python 3.6
第二次编辑:
我尝试了 cx_freeze 并创建了一个 setup.py 并构建它。之后,当我双击该程序时,它什么也不做。没有错误信息,什么都没有。我的代码如下:
import cx_Freeze
import sys
import os
PYTHON_INSTALL_DIR = os.path.dirname(sys.executable)
os.environ['TCL_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(PYTHON_INSTALL_DIR, 'tcl', 'tk8.6')
include_files = [(os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'), os.path.join('lib', 'tk86t.dll')),
(os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'), os.path.join('lib', 'tcl86t.dll'))]
packages = ["pandas", "numpy", "tkinter", "matplotlib", "osmnx", "networkx",
"geopandas", "shapely", "fiona", "branca", "folium",
"pysal"]
base = None
if sys.platform == "win32":
base = "Win32GUI"
executables = [cx_Freeze.Executable("frontend.py", base=base, icon="transport.ico")]
cx_Freeze.setup(
name = "Network_Analyst",
options = {"build_exe": {"packages":packages,
"include_files":include_files}},
version = "0.01",
description = "Network analyst",
executables = executables
)
我的程序由前端和后端两个脚本组成。我在前端部分导入后端,我应该在设置代码的某个地方添加它吗?还有一件事,我正在开发一个环境来执行这些过程,这对构建设置有影响吗?
我从我的代码中给出一个示例,以帮助您更好地理解:
在前端部分我将后端称为
import backend as bk
在脚本中:
class Centrality(tk.Frame):
def degree_cent(self):
print("Calculating Degree Centrality")
G = self.findG()
try:
bk.degree_cent(G, self.t3.get("1.0",'end-1c'), self.t2.get("1.0",'end-1c'))
except:
bk.degree_cent(G, self.t3.get("1.0",'end-1c'))
在后端我不使用OOP,我只是编写如下函数:
import osmnx as ox, networkx as nx, geopandas as gpd, pandas as pd
def degree_cent(G, outpath, *args):
G_proj = ox.project_graph(G)
nodes, edges = ox.graph_to_gdfs(G_proj)
nodes["x"] = nodes["x"].astype(float)
degree_centrality = nx.degree_centrality(G_proj)
degree = gpd.GeoDataFrame(pd.Series(degree_centrality), columns=["degree"])
当我单击可执行程序时,它仍然没有响应。完全没有反应。没有任何 Windows 事件(我已从 Windows 事件查看器中检查过)。
【问题讨论】:
-
我也有同样的问题,好像是包装fiona的问题。如果您从 CMD 行运行生成的 EXE,似乎为 fiona 导入 DLL 存在问题
标签: python-3.x executable cx-freeze