我需要在安装模块和程序后运行一个简单的脚本.我在找到如何做到这一点的直接文档方面遇到了一些麻烦.看起来我需要从distutils.command.install继承,重写一些方法并将此对象添加到安装脚本.虽然细节有点模糊,但对于这样一个简单的钩子来说似乎需要付出很多努力.有谁知道一个简单的方法来做到这一点?
我有一个新的库,必须包含很多小数据文件的子文件夹,我正在尝试将它们添加为包数据.想象一下,我有我的图书馆:
library
- foo.py
- bar.py
data
subfolderA
subfolderA1
subfolderA2
subfolderB
subfolderB1
...
Run Code Online (Sandbox Code Playgroud)
我想通过setup.py添加所有子文件夹中的所有数据,但似乎我手动必须进入每个子文件夹(有100个左右)并添加一个init .py文件.此外,setup.py会递归地找到这些文件,还是需要在setup.py中手动添加所有这些文件,如:
package_data={
'mypackage.data.folderA': ['*'],
'mypackage.data.folderA.subfolderA1': ['*'],
'mypackage.data.folderA.subfolderA2': ['*']
},
Run Code Online (Sandbox Code Playgroud)
我可以用脚本做到这一点,但似乎是一种超级痛苦.我怎样才能在setup.py中实现这一点?
PS,这些文件夹的层次结构非常重要,因为这是一个包含材料文件的数据库,我们希望在向用户提供GUI时保留文件树,因此保持文件结构的完整性对我们有利. .
情况:
我有一个python库,由git控制,并与distutils/setuptools捆绑在一起.我想基于git标签自动生成版本号,包括for setup.py sdist和alike命令,以及库本身.
对于我可以使用的第一个任务git describe或类似的解决方案(请参阅 如何在我的包中的setup.py(setuptools)中定义版本?).
例如,当我在标签'0.1'并且要求'setup.py sdist'时,我得到'mylib-0.1.tar.gz'; 或'mylib-0.1-3-abcd.tar.gz'如果我在标记后更改了代码.这可以.
问题是:
当我想让这个版本号可用于库本身时,问题出现了,所以它可以将它作为'mylib/0.1-3-adcd'发送到User-Agent HTTP头中.
如果我添加setup.py version命令,如何在我的包中获得setup.py(setuptools)中定义的版本?,然后在制作标签后生成此version.py,因为它使用标记作为值.但是在这种情况下,我需要在制作版本标记之后再进行一次提交,以使代码保持一致.反过来,这需要一个新标签进行进一步捆绑.
问题是:
如何打破这个依赖圈(generate-commit-tag-generate-commit-tag -...)?
我正在尝试C使用我的python应用程序集成第三方库Cython.我有为测试编写的所有python代码.我找不到设置它的例子.
我有一个pyd/pyx手动创建的文件.第三方给了我一个header file (*.h)和一个shared library (*.so).据我所知,没有其他依赖.有人可以提供一个如何使用Cython和设置此示例的示例disutils吗?
谢谢
在setup.py中,我已经指定了package_data,如下所示:
packages=['hermes'],
package_dir={'hermes': 'hermes'},
package_data={'hermes': ['templates/*.tpl']},
Run Code Online (Sandbox Code Playgroud)
我的目录结构粗略
hermes/
|
| docs/
| ...
| hermes/
|
| __init__.py
| code.py
| templates
|
| python.tpl
|
| README
| setup.py
Run Code Online (Sandbox Code Playgroud)
问题是我需要在源代码中使用templates目录中的文件,这样我就可以写出python代码(这个项目是一个解析器生成器).我似乎无法弄清楚如何正确地包含和使用我的代码中的这些文件.有任何想法吗?
我正在尝试从大型C++共享库(libbig.so)中获取一些函数,并通过Cython将它们暴露给Python.为此,我有一个小的C++文件(small.cpp),它提供了我需要的共享库功能的薄包装,以便通过Cython(pysmall.pyx)调用它.
libbig.so - > small.cpp,small.h - > libsmall.so - > pysmall.pyx - > pysmall.cpp - > pysmall.so
我可以在自己的计算机上构建和运行这个扩展模块:我只是将small.cpp编译成libsmall.so,然后在setup.py的Extension对象中说"libraries = ['small']"来构建扩展模块pysmall .所以.
我现在正在尝试分发此扩展模块,并且我很难跟踪描述用于分发Cython模块以及C源代码和共享库的setup.py最佳实践的资源.我已经阅读了" 安装Python模块 "," 分发Python模块 "和" 分发Cython模块 ".我了解如何自行分发扩展模块.我不太确定分发扩展模块的依赖关系的最佳方式.
Cython文档表明您应该包含生成的.cpp文件以及.pyx文件,以防Cython不存在,但它不提供代码来演示如何最好地处理每种情况.它也没有提到如何分发Cython模块所依赖的共享库.
我正在挖掘来自pandas,lxml,pyzmq,h5py等的setup.py脚本,并且发生了相当多的无关紧要的工作.如果有人有指针或示例代码可能会加速这个过程,我当然感激不尽!
根据PEP 632,distutils将被正式标记为已弃用,并且在 Python 3.12 中,它将被删除。我的产品很快就会支持 Python 3.10,我不想忍受弃用警告,所以我想删除现在的引用distutils。问题是我找不到好的、全面的文档来系统地让我知道distutils模块 C、D 和 E 中的 A 可以替换为 B。 PEP 中的迁移建议出人意料地粗略,我还没有\没有找到 的标准文档,或者任何需要替换的distutils模块(例如?)的标准文档,这可以让我填补空白。我也不确定如何查看已安装的标准发行版的内容(即物理目录和文件)以便为自己回答这些问题。setuptoolsdistutils
“迁移建议”部分说:
\n\n\n对于这些模块或类型,
\nsetuptools是最好的替代品:\n
\n- \n
distutils.ccompiler- \n
distutils.cmd.Command- \n
distutils.command- \n
distutils.config- \n
distutils.core.Distribution- \n
distutils.errors...
\n对于这些模块或函数,请使用所示的标准库模块:
\n...
\n\n
\n- \n
distutils.util.get_platform\xe2\x80\x94 使用platform模块
据推测,这意味着setuptools这些模块或类型要么有直接替代品,要么有接近的替代品(尽管我不确定如何验证这一点)。例如,也许setuptools.command.build_py可以替换distutils.command.build_py. 那是对的吗?无论如何,这些又如何呢?
distutils.core.setup我希望能够在我的setup.py中添加一个钩子,它将在安装后运行(当easy_install'ing或者在进行python setup.py安装时).
在我的项目PySmell中,我有一些Vim和Emacs的支持文件.当用户以通常的方式安装PySmell时,这些文件将被复制到实际的egg中,并且用户必须将它们删除并将它们放在他的.vim或.emacs目录中.我想要的是询问用户,安装后,他希望复制这些文件的位置,甚至只是打印文件位置的消息以及他应该如何处理它们.
做这个的最好方式是什么?
谢谢
我的setup.py看起来像这样:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from setuptools import setup
version = __import__('pysmell.pysmell').pysmell.__version__
setup(
name='pysmell',
version = version,
description = 'An autocompletion library for Python',
author = 'Orestis Markou',
author_email = 'orestis@orestis.gr',
packages = ['pysmell'],
entry_points = {
'console_scripts': [ 'pysmell = pysmell.pysmell:main' ]
},
data_files = [
('vim', ['pysmell.vim']),
('emacs', ['pysmell.el']),
],
include_package_data = True,
keywords = 'vim autocomplete',
url = 'http://code.google.com/p/pysmell',
long_description =
"""\
PySmell is a python IDE …Run Code Online (Sandbox Code Playgroud) 我需要使用它自己的构建机制来编译ICU.因此问题:
如何从中运行Makefile setup.py?显然,我只希望它在构建过程中运行,而不是在安装时运行.
我distutil用来安装我的python代码
python setup.py install
当我想在一个新代码上安装我的代码的旧分支时,我遇到了问题:
setup.py install不会覆盖旧文件.一个解决方法是触摸(touch <filename>)所有文件,因此它们被迫比安装的文件更新,但这非常难看.
我正在寻找的是强制覆盖所有文件的选项,例如.就像是
python setup.py --force install
有任何想法吗?
谢谢,Juergen
distutils ×10
python ×9
setuptools ×3
cython ×2
build ×1
c ×1
distribute ×1
git ×1
install ×1
linker ×1
overwrite ×1
python-3.x ×1
setup.py ×1
version ×1