Python 由pyinstaller创建的exe文件,运行时找不到自定义模块

Python 由pyinstaller创建的exe文件,运行时找不到自定义模块,python,python-2.7,python-3.x,python-2.6,pyinstaller,Python,Python 2.7,Python 3.x,Python 2.6,Pyinstaller,我创建了两个python文件,目录/文件关系如下: mytest--- |---mycommon.py |---myMainDir--- |----myMain.py 在mycommon.py中: def myFunc(a): ... 在myMain.py中: import sys sys.path.append(os.path.join(os.path.dirname(os.path.abspath('__file__'

我创建了两个python文件,目录/文件关系如下:

mytest---
     |---mycommon.py
     |---myMainDir---
                     |----myMain.py
在mycommon.py中:

def myFunc(a):
    ...
在myMain.py中:

import sys
sys.path.append(os.path.join(os.path.dirname(os.path.abspath('__file__')), '..'))
import mycommon.py
mycommon.myFunc("abc")
然后,我使用pyinstaller创建了exe:

pyinstall.py -F mytest\myMainDir\myMain.py
MyMain.exe已创建,但运行时,会显示找不到mycommon模块。

PyInstaller的官方手册此问题:

一些Python脚本以PyInstaller无法检测到的方式导入模块:例如,通过对变量数据使用
\uuuu import\uuuu()
函数,或者在运行时操作
sys.path
值。如果您的脚本需要PyInstaller不知道的文件,您必须帮助它

它还说明了在这种情况下应该做什么:

如果分析识别出需要一个模块,但找不到该模块,这通常是因为脚本正在操作
sys.path
。在这种情况下,最简单的方法是使用
--path=
选项列出脚本可能正在搜索导入的所有其他位置:

pyi makespec--path=/path/to/thisdir--path=/path/to/otherdir myscript.py

在分析过程中,这些路径将添加到当前的
sys.path

因此,在构建应用程序时,请指定
--path
参数。指定
-p
参数的手册相当于:

-p dir\u list
--path=dir\u list

设置导入模块的搜索路径(如使用
PYTHONPATH
)。当您的代码修改导入的
sys.path
时,使用此选项可帮助PyInstaller在正确的位置进行搜索。给出一个或多个由
分隔的路径
(在Windows下)或
(所有其他平台),或多次提供选项以提供多个搜索路径


此外,为了让pyinstaller正确地导入子文件夹中的python脚本,我还进行了一些斗争,其中子文件夹的路径是通过sys.path.insert相对设置的

Yoel的回答对我来说是正确的,但我需要仔细设置窗口中的路径。以下是我所做的:

我的主要任务是:

D:\_Development\pCompareDBSync\pCompareDBSync\pCompareDBSync.py
我的目标是:

D:\_Development\pCompareDBSync\pCompareDBSync\py\pCompareNVR.py
(我在文件夹中有许多这样导入的py。\py\但这里我只使用一个作为示例)

因此,我的主要任务包括:

sys.path.insert(0,'py')
尝试:
从pCompareNVR导入fgetNV\u sN\u dict
从pCompareNVR导入findNVRJobInDBSync
从pCompareNVR导入getNVRRecords
从pCompareNVR导入存储记录
从pCompareNVR导入比较器
例外情况除外,如e:
打印('无法导入文件:'+str(e))
输入(“按Enter键退出!”)

系统退出(0)
导入mycommon
必须不带pysuffix@andpei是的,你说得对,谢谢。这是书写时的一个错误。但是问题没有解决。路径选项看起来像是第一个尝试的选项,如果您不是从入口点源文件所在的目录调用pyinstaller。对我不起作用,请看一看非常有用的答案。没有帮助,尝试按照此答案进行操作,不,幸运的是,这不是让你的可执行文件实际上执行的东西不是。。。它本身并执行您的开发环境?我的意思是,如果你尝试在不同的机器上执行它会发生什么?如果是这样的话,请删除你的帖子(它会导致一个危险的漏洞,让人们失去时间,使他们处于危险之中)。