Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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?_Python_Django_Installation_Package_Pip - Fatal编程技术网

有没有更简单的方法来打包Python?

有没有更简单的方法来打包Python?,python,django,installation,package,pip,Python,Django,Installation,Package,Pip,今天我试着打包一个django应用程序。这是一个大婴儿,对于设置文件,我必须手动在“package”参数中写入所有包和子包。然后我必须找到复制装置、htmls/Css/图像文件、文档等的方法 这是一种糟糕的工作方式。我们是计算机科学家,我们自动化了,这样做毫无意义 当我改变我的应用程序结构时会发生什么?我必须重写setup.py 有更好的方法吗?一些自动化工具?我不敢相信,像Python这样一种重视开发人员时间的语言会让打包变得如此烦琐 我希望能够最终安装应用程序使用一个简单的pip安装。我知道

今天我试着打包一个django应用程序。这是一个大婴儿,对于设置文件,我必须手动在“package”参数中写入所有包和子包。然后我必须找到复制装置、htmls/Css/图像文件、文档等的方法

这是一种糟糕的工作方式。我们是计算机科学家,我们自动化了,这样做毫无意义

当我改变我的应用程序结构时会发生什么?我必须重写setup.py

有更好的方法吗?一些自动化工具?我不敢相信,像Python这样一种重视开发人员时间的语言会让打包变得如此烦琐


我希望能够最终安装应用程序使用一个简单的pip安装。我知道build out,但它并不简单,也不支持pip。

至少如果您使用(stdlib的
distutils的替代品)您会得到一个很棒的函数,名为,当从包根运行时,它会返回一个适合
packages
参数的点符号包名列表

以下是一个例子:

# setup.py

from setuptools import find_packages, setup

setup(
    #...
    packages=find_packages(exclude='tests'),
    #...
)

p、 美国的包装在每种语言和每种系统中都很糟糕。不管你怎么切,它都很烂。

我想你要找的工具是。有很多地方可以让你了解更多,从到


您可能想查看的其他类似或相关工具包括。

今天我自己也经历过这种痛苦。我使用了下面的代码,Yoink直截了当,它在应用程序的文件系统中查找包和数据文件(假设您从不将两者混用):


我最近一直在研究Django部署方法

我发现这两个资源非常有用:

  • -关于如何使用virtualenv、pip和fabric从开发人员机器到生产环境轻松部署Django的基本概述
  • -Jacob(ian)参加了Django部署研讨会,所有代码都发布在GitHub上。所有必要的链接都在那里

您能否安装与buildout打包的东西?我不想提供一个比在virtualenv.search中安装pip更需要的包。是的,你可以。但是,我的buildout非常容易使用。它非常庞大,有多余的文档,并且基于文本文件而不是python文件。我不能不同意你的描述,我认为你说得对。我只是不知道还有什么更适合我的建议:(你有没有关于诸如po、html/css和doc之类的satic文件的技巧,我也必须手动包含这些技巧?可能是setuptools.findall?如果有,我接受你的anwser。你可以使用
包数据
()或
数据文件
()例如,如果
数据文件
设置为
[('share/mypackage',['test.html'])]
,则安装后
测试.html
将复制到
/usr/share/mypackage
(假设您的前缀为
/usr/share
)。这不是一个银弹,但它是最好的anwset,所以我会接受它。这对这个问题毫无帮助。部署对我来说完全没问题。打包是令人讨厌的部分。我发布的链接也提供了一些打包方法方面的很好的见解。很抱歉,你没有发现这些链接有用,并决定投反对票。这太棒了!我将好的,如果行得通的话,我就接受这个建议。
import os
from distutils.command.install import INSTALL_SCHEMES

def fullsplit(path, result=None):
    """
    Split a pathname into components (the opposite of os.path.join) in a
    platform-neutral way.
    """
    if result is None:
        result = []
    head, tail = os.path.split(path)
    if head == '':
        return [tail] + result
    if head == path:
        return result
    return fullsplit(head, [tail] + result)

# Tell distutils to put the data_files in platform-specific installation
# locations. See here for an explanation:
# http://groups.google.com/group/comp.lang.python/browse_thread/thread/35ec7b2fed36eaec/2105ee4d9e8042cb
for scheme in INSTALL_SCHEMES.values():
    scheme['data'] = scheme['purelib']

# Compile the list of packages available, because distutils doesn't have
# an easy way to do this.
packages, data_files = [], []
root_dir = os.path.dirname(__file__)
if root_dir != '':
    os.chdir(root_dir)
myapp_dir = 'myapp'

for dirpath, dirnames, filenames in os.walk(myapp_dir):
    # Ignore dirnames that start with '.'
    for i, dirname in enumerate(dirnames):
        if dirname.startswith('.'): del dirnames[i]
    if '__init__.py' in filenames:
        packages.append('.'.join(fullsplit(dirpath)))
    elif filenames:
        data_files.append([dirpath, [os.path.join(dirpath, f) for f in filenames]])