setup.py不安装要求

时间:2019-02-10 22:45:28

标签: python python-3.x setup.py

我做了一个python库,这是我的第一个python库 发布于pyplgithub

该库工作得很好,但是setup()不能。

当我通过pip install安装它时,它会放下appfly软件包,但没有安装要求:Flask,flask_cors, Flask-SocketIO and jsonmerge。所以我需要自己安装。 如果我自己安装依赖项,那么效果很好,但是我认为使用python库是错误的方法吧?

这是我的setup.py文件,我做错了什么?

from setuptools import setup, find_packages
from appfly import __version__ as version

with open('README.md') as readme_file:
    readme = readme_file.read()

# with open('HISTORY.md') as history_file:
#     history = history_file.read()

requirements = [
    'Flask==1.0.2',
    'flask_cors==3.0.6', 
    'Flask-SocketIO==3.0.2',
    'jsonmerge==1.5.2'
]

setup(
    author="Italo José G. de Oliveira",
    author_email='italo.i@live.com',
    classifiers=[
        'Natural Language :: English',
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
        'Programming Language :: Python :: 3.6',
        'Programming Language :: Python :: 3.7',
    ],
    description="This pkg encapsulate the base flask server configurations",
    install_requires=requirements,
    license="MIT license",
    long_description=readme,
    include_package_data=True,
    keywords='appfly',
    name='appfly',
    packages=find_packages(),
    url='https://github.com/italojs/appfly',
    version=version,
    zip_safe=False,
)

3 个答案:

答案 0 :(得分:2)

您还可以在包的 __init__.py 中定义版本,例如:

__version__ = "1.1.0"

然后,您可以读取 init.py 并提取版本,而不是在您的 __version__ 中导入 setup.py

其实这是Python官方指南中提出的解决方案:

https://packaging.python.org/guides/single-sourcing-package-version/

答案 1 :(得分:1)

此错误的原因是defaults write com.apple.dock persistent-apps -array-add '<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>**/Applications/Google Chrome.app**</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>' killall Dock 从软件包中导入。这意味着python将在处理setup.py时(即在安装任何依赖项之前)尝试导入库。

由于您仅导入软件包以获取版本信息,因此可以用其他方法替换此导入。

一种简单的方法是将版本信息直接包含在setup.py中,但是这样做的缺点是版本不再是单一来源的。

其他方法需要一些工作,但允许版本信息继续来自单一来源。有关建议,请参见https://packaging.python.org/guides/single-sourcing-package-version/。该页面上有一个选项列表,其中一些选项可能比其他选项更适合您的软件包设置。我个人更喜欢选项3:

  

在专用模块中将值设置为setup.py全局变量   在您的项目中(例如version.py),然后读取setup.py并执行   将该值转换为变量。

     

...

     

使用执行程序:

__version__

答案 2 :(得分:0)

另一种选择是使用 versioneer 包(pandas 使用它)。

versioneer 使用 Git 标签来创建版本值。

步骤

第 0 步:使用 git 标签

Versioneer 使用您的 Git 标签。

第 1 步:安装 versioneer

pip install versionner

第 2 步:执行 versioneer

versioneer install

第 3 步:按照 versioneer 说明

Versioneer 会要求您对 setup.py 和 setup.cfg 进行一些更改。\

在 setup.py 中,您必须添加如下内容:

import versioneer

setup(
    version=versioneer.get_version(),
    cmdclass=versioneer.get_cmdclass()
)

在 setup.cfg 中:

[versioneer]
VCS = git
style = pep440
versionfile_source = your_project_name/_version.py
versionfile_build = your_project_name/_version.py
tag_prefix = v
parentdir_prefix = 

注意:在示例中,我设置了“tag_prefix = v”,因为我喜欢标记:v0.1.0、v1.0.0 等等

在那之后,尝试:

python setup.py version