在Linux

时间:2018-05-14 19:16:18

标签: linux pyinstaller multiprocess

我创建了一个小样本来演示错误我正在尝试使用pyinstaller来构建可执行程序。我的python是3.6.5并安装了/ home / repos / ges / Python / bin。我不确定非标准的python安装是否在错误中起作用。

import time
import random
from multiprocessing.dummy import Pool as ThreadPool


# A function to run against a list
def this_job(job):

time_delay = random.randrange(0, 5)
time.sleep(time_delay)

print("after a small " + str(time_delay) + " second delay here is job " + str(job))


forked_jobs = []
for i in range(500):
    forked_jobs.append(i)


# Make the Pool of workers and do the work
pool = ThreadPool(10)
pool.map(this_job, forked_jobs)
# close the pool and wait for the work to finish
pool.close()
pool.join()

我可以从我编写它的位置运行该文件,并查看类似于:

的输出

这是一个小的0秒延迟,这是工作52

这是一个小的0秒延迟,这是工作117

这是一个小的1秒延迟,这是工作39

经过一小秒的延迟后,这是工作65 ...

当我尝试使用./python3 pyinstaller bp2.py构建它并在dist文件夹中运行可执行文件时,我看到以下错误。

追踪(最近一次通话):   文件“site-packages / PyInstaller / loader / rthooks / pyi_rth_multiprocessing.py”,第8行,in   在exec_module中输入文件“/home/repos/ges/Python/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py”,第631行     exec(字节码,模块。字典)   文件“multiprocessing / spawn.py”,第19行,in     来自。 import util   在exec_module中输入文件“/home/repos/ges/Python/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py”,第631行     exec(字节码,模块。字典)   文件“multiprocessing / util.py”,第17行,in     从子进程导入_args_from_interpreter_flags   在exec_module中输入文件“/home/repos/ges/Python/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py”,第631行     exec(字节码,模块。字典)   文件“subprocess.py”,第136行,in   在load_module中输入文件“/home/repos/ges/Python/lib/python3.6/site-packages/PyInstaller/loader/pyimod03_importers.py”,第714行     module = loader.load_module(fullname) ImportError:/home/repos/ges/Python/GES_Module/dist/bp2/_posixsubprocess.so:未定义的符号:_Py_set_inheritable_async_safe [15670]无法执行脚本pyi_rth_multiprocessing

不确定如何解决。

1 个答案:

答案 0 :(得分:0)

看来我的python构建位置导致了这个错误。我在一台安装了典型位置的python的机器上测试了上述内容,它按预期工作。