Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带pipenv的Pyinstaller_Python_Python 3.x_Macos_Pyinstaller_Pipenv - Fatal编程技术网

Python 带pipenv的Pyinstaller

Python 带pipenv的Pyinstaller,python,python-3.x,macos,pyinstaller,pipenv,Python,Python 3.x,Macos,Pyinstaller,Pipenv,因此,这是我第一次尝试构建python项目(在本例中使用pyinstaller)。我使用pipenv来管理我的包,但在我使用的python发行版和pyinstaller之间似乎存在一些基本问题 我使用$pipenv install--dev pyinstaller将pyinstaller安装到我的环境中 运行$pipenv run pyinstaller src/game.py会产生: OSError:未找到Python库:。Python、libpython3.8m.dylib、libpytho

因此,这是我第一次尝试构建python项目(在本例中使用pyinstaller)。我使用pipenv来管理我的包,但在我使用的python发行版和pyinstaller之间似乎存在一些基本问题

我使用
$pipenv install--dev pyinstaller
将pyinstaller安装到我的环境中

运行
$pipenv run pyinstaller src/game.py
会产生:

OSError:未找到Python库:。Python、libpython3.8m.dylib、libpython3.8.dylib、Python
这意味着您的Python安装没有附带正确的库文件。
这通常是由于缺少开发包,或者Python安装的构建参数不合适造成的。
*在Debian/Ubuntu上,您需要安装Python开发包
*apt-get-install-python3-dev
*apt-get-install-python-dev
*如果您自己构建Python,请使用“--enable shared”(或达尔文上的“--enable framework”)重新构建Python
问题似乎是我没有使用python的“共享”/“框架”版本

提供了一个潜在的解决方案,但我不明白为什么我需要从pipenv迁移到pyenv来处理这个问题


有没有办法让pipenv使用python的共享版本?我误解了pipenv的一个基本概念,这会使它与pyinstaller不兼容吗?

我只是在将pyinstaller与pipenv一起使用时遇到了同样的问题。你不需要切换到pyenv,我只是让它工作

从源代码构建Python时,可以设置一个标志,
——enable shared
。设置后,它允许您将Python库与应用程序捆绑在一起。默认设置是不设置此标志,这是Pyinstaller的问题,Pyinstaller希望将Python解释器与应用程序捆绑在一起

您是否从源代码构建了自己的Python版本?否则,您的Linux发行版的默认Python可能构建时没有此标志。您可以通过运行正在使用的Python版本并运行以下代码进行检查:

from distutils.sysconfig import get_config_var
print get_config_var('CONFIG_ARGS') # Python 2
# print(get_config_var('CONFIG_ARGS')) # Python 3
如果在输出中没有看到
“--enable shared”
,则您的Python版本不是使用此标志构建的

我建议如何解决此问题

我在一个虚拟机上做了所有这些,这样我就可以把它炸了,如果有什么奇怪的事情发生,我可以重新开始

我只为我的应用程序安装了一个特殊版本的Python。这样,如果系统Python升级,Python版本将永远不会更改

  • 安装安装Python所需的所有依赖项:
  • 从下载所需Python版本的源代码
  • 将存档文件和
    cd
    解压缩到解压缩文件夹中
  • 运行配置脚本以构建Python的共享版本。包括所有其他所需的生成标志。我建议将前缀标志设置为包含应用程序的名称,以确保此版本的Python与应用程序绑定,至少在名称上:
  • 运行
    make
  • 最后,运行
    sudo make altbininstall
  • 这显然会安装静态Python库和一个链接到它的可执行文件,但您的安装仍然会有一个用于嵌入应用程序的共享库。我试过这个,效果很好


    我从中改编了这个策略,其中有很多关于静态和共享Python的信息。我没有按照作者的建议使用
    makeinstall
    ,因为我没有在docker容器中执行任何操作,而且我绝对不想弄乱系统的默认python。

    您解决过这个问题吗?我在下面添加了一个解决方案,但我很好奇您是否找到了另一种方法。这似乎也适用于检查是否指定了--python shared。在我的业余时间研究这个。不确定我是否会一直进行确认。对于mac上的安装,我将上面的修改为:
    brew安装openssl xz gdbm
    (来自python.org文档)和
    /configure--enable shared--enable optimization--prefix=/usr/local/py traffic sim--with openssl=$(brew--prefix openssl)
    以正确设置openssl。重新安装的环境为:
    pipenv安装--dev--python=/usr/local/py traffic sim/bin/python3.8
    (pyinstaller是此环境中的一个开发包)。
    sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev
    
    ./configure --enable-shared --enable-optimizations --prefix=/usr/local/<name of project>
    
    ./configure --enable-optimizations --prefix=/usr/local/<name of project>