相关疑难解决方法(0)

使用Python setuptools安装后脚本

是否可以将安装后的Python脚本文件指定为setuptools setup.py文件的一部分,以便用户可以运行该命令:

python setup.py install
Run Code Online (Sandbox Code Playgroud)

在本地项目文件存档,或

pip install <name>
Run Code Online (Sandbox Code Playgroud)

对于PyPI项目,脚本将在标准setuptools安装完成后运行?我希望执行可以在单个Python脚本文件中编码的安装后任务(例如,向用户提供自定义安装后消息,从其他远程源存储库中提取其他数据文件).

几年前我遇到了这个回答这个主题的答案,听起来好像当时的共识是你需要创建一个install子命令.如果仍然如此,那么有人可以提供一个如何执行此操作的示例,以便用户无需输入第二个命令来运行脚本吗?

python software-distribution setuptools pypi setup.py

82
推荐指数
3
解决办法
2万
查看次数

重写cmdclass时忽略python setuptools install_requires

我有一个setup.py看起来像这样:

from setuptools import setup
from subprocess import call
from setuptools.command.install import install

class MyInstall(install):
    def run(self):
        call(["pip install -r requirements.txt --no-clean"], shell=True)
        install.run(self)

setup(
    author='Attila Zseder',
    version='0.1',
    name='entity_extractor',
    packages=['...'],
    install_requires=['DAWG', 'mrjob', 'cchardet'],
    package_dir={'': 'modules'},
    scripts=['...'],
    cmdclass={'install': MyInstall},
)
Run Code Online (Sandbox Code Playgroud)

我需要MyInstall因为我想从github安装一些库而我不想使用dependency_links选项,因为它不鼓励(例如这里),所以我可以用requirements.txt来做这件事.

当我安装这个软件包时pip,一切都运行正常,但由于某些原因,我必须以一种纯粹的方式解决这个问题python setup.py install.它没有.

当覆盖cmdclasssetup()与我自己的类,install_requires似乎被忽略.一旦我注释掉那一行,就会安装这些软件包.

我知道例如在distutils中不支持install_requires(如果我记得很清楚),但它在setuptools中.然后cmdclass就不会有任何影响install_requires.

我用Google搜索了这个问题几个小时,在stackoverflow上找到了很多相关的答案,但不是针对这个特殊的问题.

把所有需要的包放到requirements.txt,一切都运行正常,但我想了解为什么会这样.谢谢!

python distutils setuptools install-requires

20
推荐指数
2
解决办法
4474
查看次数

是否所有python setuptools的安装后选项都已损坏?

我正在尝试打包PyQt的版本(我没有为我需要的配置提供安装程序),但我找不到任何有效的打包配置.但问题并不是PyQt特有的.

问题:为了使模块工作,它需要python的PREFIX目录中的文件.我知道这可能是不好的形式,但在我的情况下需要有一个qt.conf文件,除了使文件可用之外,我没有什么可以做的.我需要能够运行安装后脚本来创建包含已安装的PyQt路径的文件.或者至少这似乎是最好的解决方案.

我看过的选项:

  • 我可以使用python setup.py install并覆盖setuptools.command.install类.但是,这在手动运行setup.py时有效,并且需要解压缩bdist并在包文件夹中具有cmd提示符.它不适用于bdist_wininst,bdist_msi或bdist_wheel,它们更便于安装(包装点).可能,但不是一个很好的解决方案.

  • bdist_wheel似乎是一个不错的选择,但它不会在安装后运行任何东西,只会将文件放在特定的文件夹中,不包括PREFIX.

  • bdist_wininst支持安装后脚本(在创建包时通过--install-script开关),但不能与virtualenv一起使用.有一个stackoverflow答案建议运行easy_install或wheel convert,但这些选项只解包,他们不会运行安装脚本.否则,您必须更改注册表,这不是一个可接受的解决方案.

我错过了什么?有可行的选择吗?

python setuptools

14
推荐指数
1
解决办法
561
查看次数

安装完轮后安装后脚本

使用from setuptools.command.install import install,如果我运行,我可以轻松运行自定义安装后脚本python setup.py install.这是相当微不足道的.

目前,该脚本除了打印一些文本之外什么都不做,但我希望它能够处理安装新软件包时需要进行的系统更改 - 例如,备份软件包正在使用的数据库.

我想为我的包生成一个Python轮,然后将其复制并安装在一组部署机器上.但是,我的自定义安装脚本不再在部署计算机上运行.

我究竟做错了什么?这甚至可能吗?

python pip setuptools python-wheel

12
推荐指数
2
解决办法
2781
查看次数

使用具有安装后和python依赖关系的setuptools

这与这个问题有些相关.假设我有一个我想通过rpm部署的软件包,因为我需要在安装后进行一些文件复制,并且我有一些我想要声明的非python依赖项.但是我们还说我有一些python依赖项,可以在PyPI中轻松使用.好像我只是打包成一个鸡蛋,然后解压缩python setup.py install会自动处理我的python依赖关系,代价是丢失任何安装后功能和非python依赖项.

有没有推荐的方法呢?我想我可以在预安装脚本中指定它,但后来我进入信息重复,并没有真正使用setuptools的任何东西.

(我目前的设置是传递install_requires = ['dependency_name']setup,它适用于python setup.py bdist_eggunzip my_package.egg; python my_package/setup.py install,但不python setup.py bdist_rpm --post-install post-install.shrpm --install my_package.rpm.)

python packaging rpm setuptools

5
推荐指数
1
解决办法
1905
查看次数

使用 `setup.py` 安装软件包后运行 `chmod`

假设我有一个包,它在代码的某处调用一个可执行文件(例如第三方 c/java 程序)。让我们进一步假设,应用程序足够小/微不足道,可以与包捆绑在一起。例如单个可执行文件 ( cfoo)。

我可以继续,并将文件放入以下结构中:

.
|-- foo
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- core.py
|   |-- corebin
|   |   `-- cfoo
|   `-- foomain.py
`-- setup.py
Run Code Online (Sandbox Code Playgroud)

并准备一个setup.py如下:

from setuptools import setup

setup(
    name='foo',
    version='1.0',
    packages=['foo'],
    scripts=['foo/foomain.py'],
    package_data={'foo': ['corebin/*']},
    zip_safe=False
)
Run Code Online (Sandbox Code Playgroud)

这将使我能够正确安装软件包。后来,在包代码中,我可以这样做:

from subprocess import call

import pkg_resources as res

def main():
    fn = res.resource_filename('foo', 'corebin/cfoo')
    print "Resource located at:", fn
    call([fn])
Run Code Online (Sandbox Code Playgroud)

不幸的是,可执行文件将在没有设置可执行标志的情况下安装。即使原始文件已设置。chmodsetup.py脚本末尾添加调用并不容易,因为首先需要找出正确的安装路径。我尝试过,resource_filename但返回了本地文件(如“预安装”)。

如何解决这个问题?还 …

python distutils virtualenv distribute setup.py

5
推荐指数
1
解决办法
1130
查看次数