如何制作setup.py包含不属于代码的文件?(具体来说,它是一个许可证文件,但它可能是任何其他东西.)
我希望能够控制文件的位置.在原始源文件夹中,该文件位于包的根目录中.(即与最顶层处于同一级别__init__.py.)我希望它在安装软件包时保持完全无论操作系统如何.我怎么做?
我希望能够在我的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添加安装后任务,如如何使用简单的安装后脚本扩展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)
这种方法有效,但据我所知,有两个不足之处:
PATH,则安装后脚本将使用不同的解释器执行,这可能会导致问题.distutils.cmd.Command.execute.我怎样才能改进我的解决方案?这样做有推荐的方法/最佳做法吗?如果可能的话,我想避免引入另一个依赖.
我有一个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.它没有.
当覆盖cmdclass在setup()与我自己的类,install_requires似乎被忽略.一旦我注释掉那一行,就会安装这些软件包.
我知道例如在distutils中不支持install_requires(如果我记得很清楚),但它在setuptools中.然后cmdclass就不会有任何影响install_requires.
我用Google搜索了这个问题几个小时,在stackoverflow上找到了很多相关的答案,但不是针对这个特殊的问题.
把所有需要的包放到requirements.txt,一切都运行正常,但我想了解为什么会这样.谢谢!
我有一个开源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) 我的项目树结构
\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\nRun Code Online (Sandbox Code Playgroud)\n\nsetup.py(为了减少代码量,删除了一些代码)
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\nRun Code Online (Sandbox Code Playgroud)\n\nPostInstall当我运行时,执行得很好python3 setup.py install。因此,上传到Pypi如下(来自此文档)
$ python3 setup.py bdist_wheel\n# Created …Run Code Online (Sandbox Code Playgroud) 是否可以自动删除由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)
我已经尝试添加--all到clean命令,虽然它确实会删除的一些文件build的目录,它不会删除目录本身或任何文件中的其他两个目录.
我假设这应该很容易,我只是在错误的地方.我已经习惯了这个功能,例如几乎任何项目使用的make地方make clean或make distclean将删除任何构建产品.
可以使用以下内容加载自定义绘图样式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,人们会得到最新的样式?
我将我的包捆绑为 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 包后没有运行任何内容。
我想分发一个自定义的matplotlib样式表,但是现在我能想到的唯一方法是将它上传到Gist或其他一些网站并告诉我的用户手动将其下载到某个配置目录.
有没有办法分发样式表,就好像它是一个Python包,或者作为模块的一部分?容易的事pip install mpl_fancy.
python ×9
setuptools ×6
distutils ×4
matplotlib ×2
pip ×2
setup.py ×2
install ×1
installation ×1
packaging ×1
post-install ×1
pypi ×1
python-3.5 ×1
python-3.x ×1
python-wheel ×1
sdist ×1