【问题标题】:Package a django project and its dependencies for a standalone "product"为独立的“产品”打包一个 django 项目及其依赖项
【发布时间】:2011-05-26 00:44:29
【问题描述】:

我使用 Django 作为框架制作了一个小的“应用程序”。这是一个不需要部署到服务器而是在机器上本地运行的应用程序。因此 runserver.py 工作得很好。

作为开发人员,我对启动终端、运行 python manage.py runserver 并使用它感到满意。

但我有一些 Mac OS X 和 Windows 朋友想要使用我的应用程序,但他们没有 virtualenvgit 或其他任何东西。

有没有办法可以把它打包成一个独立的产品?当然,这取决于系统上是否安装了 Python,但可以将 virtualenv 与 django 和所有东西打包在一起,然后将其复制到另一个系统并使其工作?

甚至可能以某种守护程序模式运行运行服务器?

【问题讨论】:

  • 有些事情并不容易,必须咬紧牙关才能做好。
  • 如果你能找到更好的方法来做到这一点,我想每个人都想知道。
  • 你要找的是'Java' :) 老实说,如果我看到另一个捆绑了 apache tomcat、velocity 模板和整个该死的 Java 运行时环境的包,我会爆炸的!好的,轻微的拖钓,但这里的其他答案说得更好。这很棘手,需要做一些命令行工作。不确定是否有人成功获得了使用 py2exe 的 django 安装程序,但可能值得谷歌搜索。
  • 关于答案,这不是我通常想做的事情。我所有的项目都使用构建和结构部署到我们的服务器上。但由于这是一个小小的“私人”网络应用程序,所以能够像应用程序 CouchPotato 和 SickBeard 一样运行它会很好。用最少的绒毛。还有一个处于守护模式的网络服务器。

标签: python django packaging


【解决方案1】:

是的,您可以打包。 Django 可能不是最容易做到这一点的,但其他框架的原理是相同的。您需要制作一个安装程序来安装您需要的一切。对于不同的平台,该安装程序需要有所不同。例如 Windows、Ubuntu、OS X 等。这也意味着每个平台的答案都有很大的不同,只有一半的答案取决于 Django。 :-(

这有点糟糕,但这就是目前的生活。没有很好的独立于平台的方式来为最终用户安装软件。

【讨论】:

    【解决方案2】:

    使用 setuptools 和 easy_install。

    这是一个介绍性的article

    【讨论】:

    • 哦,现在可以轻松安装 Django 了吗?凉爽的。但是您仍然必须安装 Python 和 Setuptools,我认为非程序员朋友不会喜欢这些。 :-) 不过,我猜总比没有好。
    【解决方案3】:

    有几种方法可以做到这一点。我认为您正在寻找更多构建工具(包括打包),而不仅仅是 Python 解决方案。这是我过去使用过的一对:

    zc.buildout:用于构建和部署 Python 模块和应用程序,但也可以与其他语言一起使用,只需稍加按摩。易于使用(用于构建工具)。

    make:软件打造经典。几乎适用于所有语言,但对于初学者来说有点过时且难以学习。

    【讨论】:

      【解决方案4】:

      现在 Docker 可能是一个很好的答案

      用户需要先install Docker,但它可以在 Windows 和 OSX 以及 Linux 上运行。

      您的 Dockerfile 负责安装所有依赖项,然后运行开发服务器(或者您甚至可以在容器中运行适当的网络服务器)

      【讨论】:

        【解决方案5】:

        我还没有找到完美的解决方案。

        我目前的方法是提供一个 docker 镜像,因为这对每个人来说都很容易使用。这包括一个alpine 基本图像,因为它很小,而且 python + django 和应用程序本身。您还可以包含一个像 nginx 这样的网络服务器和一个像 uwsgi 或 gunicorn 这样的应用服务器,并为其公开一个端口。

        所以最终您的用户只需运行容器并访问http://localhost:9000/ 下的网络应用程序或类似的东西。 这真的很方便,也是我尝试一些我发现的应用程序的首选方式。

        “正确”的方法是为您所针对的每个操作系统和发行版构建一个包,以及一个简单的 zip 包,这样人们也可以手动安装应用程序。

        要构建我建议使用fpm 的软件包。它消除了使用原生工具进行打包的大部分痛苦。然后,这些包将依赖于适当的应用程序服务器,例如 uwsgi 或 gunicorn。

        所以最后你可以像apt install your-package一样安装它,它取决于python-djangouwsgi等。

        对于将所有文件放在包中的位置和位置,每个发行版都有自己的做法。我更喜欢将所有内容放在/usr/share/webapps/myapp/ 下,并将配置放在/etc/myapp/config.py 或类似的东西下。

        对于 Windows 和 macOS,有类似 PyInstaller 的解决方案。我还没有将它用于 django 应用程序,但它应该可以完成这项工作。您也应该在其中包含一个像 uwsgi 这样的应用服务器。

        一般来说,您不想在生产环境中运行 django 开发服务器。所以在包装时请记住这一点。

        希望对你有所帮助。

        【讨论】:

          【解决方案6】:

          适用于 Linux 的新 snap 包管理器应该非常适合这项任务。它提供了迄今为止对 Python 应用程序来说相当痛苦的所有解决方案(依赖项、解释器等),同时避免了 Docker 的复杂性。

          【讨论】:

            【解决方案7】:

            这并不难。首先,您需要将所有文件添加到命名空间并添加setup.pyLICENSE.gitignore 等。您也可以打包应用程序,这是最好的。

            ├── django-project
            │   │   ├── example-dir
            |   |   |   ├── project_name
            |   |   |   |    ├── project_name
            |   |   |   |    ├── mangage.py
            │   │   ├── LICENSE
            │   │   ├── README.md
            │   │   ├── requirements.txt
            │   │   └── setup.py
            

            和 setup.py 像这样:

            setuptools.setup(
                name="example-pkg"
                version="0.0.1",
                ...
                packages=setuptools.find_namespace_packages(include=['example-dir.*']),
                namespace_packages=['example-dir'],
            )
            

            我建议你在它之前阅读这些文档。

            https://docs.djangoproject.com/en/3.0/intro/reusable-apps/

            https://packaging.python.org/tutorials/packaging-projects/

            https://packaging.python.org/guides/packaging-namespace-packages/

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-09-30
              • 1970-01-01
              • 1970-01-01
              • 2019-03-19
              • 2019-06-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多