我正在尝试向Python distutils添加一个安装后任务,如如何使用简单的安装后脚本扩展distutils?中所述?。该任务应该在已安装的lib目录中执行Python脚本。此脚本生成安装包所需的其他Python模块。
我的第一次尝试如下:
from distutils.core import setup
from distutils.command.install import install
class post_install(install):
def run(self):
install.run(self)
from subprocess import call
call(['python', 'scriptname.py'],
cwd=self.install_lib + 'packagename')
setup(
...
cmdclass={'install': post_install},
)
这种方法可行,但据我所知,有两个缺陷:
PATH
获取的解释器,则安装后脚本将使用另一个解释器执行,这可能会导致问题
如何改进我的解决方案?是否有推荐的方法/最佳实践?如果可能的话,我希望避免引入另一个依赖项。
我认为执行后期安装并保留需求的最简单方法是修饰对setup(…)的调用
:
from setup tools import setup
def _post_install(setup):
def _post_actions():
do_things()
_post_actions()
return setup
setup = _post_install(
setup(
name='NAME',
install_requires=['...
)
)
这将在声明
set
时运行set()
。完成需求安装后,它将运行_post_install()
函数,该函数将运行内部函数_post_actions()
。
解决这些缺陷的方法是:
>
但是,请注意,--dry run
选项当前已损坏,并且无论如何都无法正常工作。
我最终得到了以下解决方案:
import os, sys
from distutils.core import setup
from distutils.command.install import install as _install
def _post_install(dir):
from subprocess import call
call([sys.executable, 'scriptname.py'],
cwd=os.path.join(dir, 'packagename'))
class install(_install):
def run(self):
_install.run(self)
self.execute(_post_install, (self.install_lib,),
msg="Running post install task")
setup(
...
cmdclass={'install': install},
)
请注意,我为我的派生类使用类名安装
,因为这是Pythonsetup.py--help-命令将使用的。
问题内容: 我正在尝试向Pythondistutils添加安装后任务,如如何使用简单的安装后脚本扩展distutils中所述。。该任务应该 在已安装的lib目录中 执行Python脚本。该脚本生成安装的软件包所需的其他Python模块。 我的第一次尝试如下: 这种方法有效,但是据我所知有两个缺陷: 如果用户使用的Python解释器不是从中选择的,则将使用 其他 解释器执行安装后脚本,这可能会引起问
问题内容: 安装模块和程序后,我需要运行一个简单的脚本。我很难找到有关如何执行此操作的直接文档。看来我需要从distutils.command.install继承,重写一些方法,然后将此对象添加到安装脚本中。虽然细节有些模糊,但是对于这样一个简单的钩子似乎需要付出很多努力。有人知道这样做的简单方法吗? 问题答案: 我花了一天时间浏览distutils源码,以了解足够的知识来制作一堆自定义命令。它虽
问题内容: 我希望能够将钩子添加到将在安装后运行的setup.py中(在easy_install’ing或执行python setup.py安装时)。 在我的项目PySmell中,我有一些针对Vim和Emacs的支持文件。当用户以通常的方式安装PySmell时,这些文件将复制到实际的鸡蛋中,并且用户必须将它们捞出并将它们放置在他的.vim或.emacs目录中。我想要的是询问用户,安装后,他想在哪里
安装包时(通过使用python setup.py install),依赖项从python包索引(pypi.python.org)获取。但我的目标主机无法访问internet。我已将依赖项放在本地目录下,如下所示。 通过运行?
Python有一个令人困惑的工具历史,可以用来打包和描述项目:这些工具包括标准库中的,,和(也许更多)。似乎和被停用,取而代之的是,这留下了两个相互竞争的标准。 据我所知,提供了比多得多的选项(例如,声明依赖项、测试等),但是它没有包含在Python标准库中(尚未?)。 Python打包用户指南[1]现在建议: 使用定义项目并创建源发行版。 并解释道: 尽管您可以对许多项目使用纯,但它不支持定义对
问题内容: 您可以简单地从python安装中删除目录,还是必须删除任何残留文件? 问题答案: 它取决于您传递给的选项以及系统/软件包中distutils配置文件的内容。我不相信会以这些方式在指定目录之外修改任何文件。 值得注意的是,distutils目前没有卸载命令。 还值得注意的是,删除程序包/鸡蛋可能会导致依赖关系问题,例如尝试减轻此类问题的实用程序。