相关疑难解决方法(0)

包含setup.py的非Python文件

如何制作setup.py包含不属于代码的文件?(具体来说,它是一个许可证文件,但它可能是任何其他东西.)

我希望能够控制文件的位置.在原始源文件夹中,该文件位于包的根目录中.(即与最顶层处于同一级别__init__.py.)我希望它在安装软件包时保持完全无论操作系统如何.我怎么做?

python distutils

172
推荐指数
9
解决办法
9万
查看次数

如何将安装后脚本添加到easy_install/setuptools/distutils?

我希望能够在我的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)

python distutils setuptools

32
推荐指数
1
解决办法
9470
查看次数

使用distutils/setuptools在安装后执行Python脚本

我正在尝试向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},
)
Run Code Online (Sandbox Code Playgroud)

这种方法有效,但据我所知,有两个不足之处:

  1. 如果用户使用的Python解释器不是拾取者PATH,则安装后脚本将使用不同的解释器执行,这可能会导致问题.
  2. 它对于干运行等是不安全的,我可以通过将其包装在一个函数中并使用它来解决它distutils.cmd.Command.execute.

我怎样才能改进我的解决方案?这样做有推荐的方法/最佳做法吗?如果可能的话,我想避免引入另一个依赖.

python install distutils setuptools post-install

29
推荐指数
1
解决办法
1万
查看次数

重写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
查看次数

打包像spyder一样的python应用程序

我有一个开源python软件(GridCal),它有一个用PyQt5制作的GUI.该程序是可以安装的pip3 install GridCal.

我想知道我有什么必须这样做,当有人pip-install我的程序时,它出现在系统菜单上,就像安装Spyder(python IDE)时一样

到目前为止,我所能提供的只是setup.py我的程序,但我不知道它是否相关.

from distutils.core import setup
import sys
import os

name = "GridCal"

# Python 2.4 or later needed
if sys.version_info < (3, 5, 0, 'final', 0):
    raise (SystemExit, 'Python 3.5 or later is required!')

# Build a list of all project modules
packages = []
for dirname, dirnames, filenames in os.walk(name):
        if '__init__.py' in filenames:
            packages.append(dirname.replace('/', '.'))

package_dir = {name: name}

# Data_files (e.g. doc) …
Run Code Online (Sandbox Code Playgroud)

python installation setup.py python-3.5

16
推荐指数
1
解决办法
444
查看次数

使用 pip 执行安装后任务

我的项目树结构

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 example.gif\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 funmotd\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 config.json\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 quotes_db.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 LICENSE\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 setup.py\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

setup.py(为了减少代码量,删除了一些代码)

\n\n
import sys\nimport os\nimport setuptools\nfrom setuptools.command.install import install\n\nclass PostInstall(install):\n    def run(self):\n        mode = 0o666\n        bashrc_file = os.path.join(os.path.expanduser(\'~\'), ".bashrc")\n        install.run(self)\n        # Added CLI to .bashrc\n        # Change "config.json" file permission\n\n\nsetuptools.setup(\n      ...\n      entry_points={\'console_scripts\': [\'funmotd = funmotd:main\']},\n      package_dir={\'funmotd\': \'funmotd/\'},\n      package_data={\'funmotd\': [\'config.json\'], },\n      include_package_data=True,\n      python_requires=">=3.4",\n      cmdclass={\'install\': PostInstall, },\n      ...      \n)\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

PostInstall当我运行时,执行得很好python3 setup.py install。因此,上传到Pypi如下(来自此文档

\n\n
$ python3 setup.py bdist_wheel\n# Created …
Run Code Online (Sandbox Code Playgroud)

pip setuptools pypi python-3.x python-wheel

9
推荐指数
1
解决办法
1770
查看次数

如何删除构建产品

是否可以自动删除由setup.py基于setuptools的脚本生成的构建产品?

我刚开始使用一个新的Python项目,这是我第一次使用setuptools作为开发人员,所以我可能会遇到问题.当我使用的建设项目python setup.py bdist,三个目录,build,dist和一个结束的.egg-info创建.当我然后运行python setup.py clean它似乎没有做任何事情只是打印这个:

running clean
Run Code Online (Sandbox Code Playgroud)

我已经尝试添加--allclean命令,虽然它确实会删除的一些文件build的目录,它不会删除目录本身或任何文件中的其他两个目录.

我假设这应该很容易,我只是在错误的地方.我已经习惯了这个功能,例如几乎任何项目使用的make地方make cleanmake distclean将删除任何构建产品.

python build-process setuptools

7
推荐指数
1
解决办法
665
查看次数

我该如何分享matplotlib风格?

可以使用以下内容加载自定义绘图样式matplotlib:

>>> import matplotlib.pyplot as plt
>>> plt.style.use('ggplot')
Run Code Online (Sandbox Code Playgroud)

而且我知道我可以创建自己的,http://matplotlib.org/users/style_sheets.html解释了如何.

让我们说我创造了一个惊人的matplotlib风格 - 我怎么能与其他人分享?有没有办法用pip/conda或其他合适的方法做到这一点?

这些文档包括"创建自定义样式并通过调用style.use以及样式表的路径或URL来使用它们"的建议. - 所以我想我可以在一些公共git存储库上维护一个链接,如果他们放了那个URL,人们会得到最新的样式?

python matplotlib

7
推荐指数
1
解决办法
1252
查看次数

pip install &lt;package&gt; 之后执行命令

我将我的包捆绑为 sdist zip 文件,之后我可以使用 pip install 将我的包导入到任何地方,但我想在调用 pip install 后自动运行一些安装后命令。我无法使用 python setup.py install 因为它是一个 sdist 并且我正在使用 pip 来安装它。我确实有一个 PostInstall 类,但 pip install 包后没有任何运行。有没有办法在 pip 安装包后自动运行脚本。我尝试过使用 postinstall,但它不起作用,而且我也不知道如何在安装方法中使用脚本 atrib。

这是我的 setup.py 文件: Setup.py

我无法使用 python setup.py install 因为它是一个 sdist 并且我正在使用 pip 来安装它。我确实有一个 MyInstall 类,但 pip install 包后没有运行任何内容。

python pip setuptools setup.py sdist

6
推荐指数
0
解决办法
5167
查看次数

如何发布或分发matplotlib样式表

我想分发一个自定义的matplotlib样式表,但是现在我能想到的唯一方法是将它上传到Gist或其他一些网站并告诉我的用户手动将其下载到某个配置目录.

有没有办法分发样式表,就好像它是一个Python包,或者作为模块的一部分?容易的事pip install mpl_fancy.

python packaging matplotlib

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