我今天尝试包装Django应用程序。这是一个大婴儿,使用设置文件,我必须手动编写“软件包”参数中的所有软件包和子软件包。然后,我必须找到一种方法来复制固定装置,HTMLS / CSS / IMAGE文件,文档等。

这是一种可怕的工作方式。我们是计算机科学家,我们自动化,这样做是没有道理的。

当我更改应用程序结构时,什么?我必须重写setup.py。

有没有更好的办法 ?一些自动化的工具? 我不敢相信像Python这样的价值开发人员的时间,使包装变得如此繁琐。

我希望最终能够使用简单的PIP安装安装该应用程序。我知道构建,但这并不简单,并且不友好。

有帮助吗?

解决方案

至少如果您使用 setuptools (替代Stdlib的 distutils)您得到了一个很棒的功能称为 find_packages() 从包装根跑时 packages 范围。

这是一个示例:

# setup.py

from setuptools import find_packages, setup

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

PS包装吸收每个语言和每个系统。无论您如何切片,它都会很烂。

其他提示

我今天自己经历了这种痛苦。我用了以下内容,直接从 django的setup.py, ,它在应用程序的文件系统中寻找包装和数据文件(假设您永远不会混合两者):

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]])

我认为您要寻找的工具是 建立. 。有很多地方您可以从中了解更多信息 幻灯片PYCON视频.

您可能想检查的其他类似或相关的工具包括 Virtualenv,面料和PIP.

我最近对Django部署方法进行了一些研究。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top