有没有更简单的方法与Python打包?
-
28-09-2019 - |
题
我今天尝试包装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部署方法进行了一些研究。
我发现这两个资源非常有用:
- http://www.caktusgroup.com/blog/2010/04/22/basic-django-deployment-with-virtualenv-fabric-pip-pip-pip-and-rsync/ - 如何使用Virtualenv,Pip和Fabric在从Dev Machine到生产的Django部署轻松部署的基本概述。
- https://github.com/jacobian/django-deployment-workshop/ -Jacob(Ian)举行了Django部署研讨会,并在Github上发布了所有代码。所有必要的链接也在那里。
不隶属于 StackOverflow