setup.py 不安装要求

Ita*_*osé 5 python setup.py python-3.x

我做了一个 python 库,这是我的第一个 python 库\n发布在pyplgithub上

\n\n

该库工作得很好,但 setup() 却不行。

\n\n

当我通过安装它时pip install,它会下载 appfly 软件包,但不安装要求:Flask,flask_cors, Flask-SocketIO and jsonmerge。所以我需要自己安装它。\n如果我自己安装依赖项,它工作得很好,但我认为这是使用 python 库的错误方法,对吧?

\n\n

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

\n\n
from setuptools import setup, find_packages\nfrom appfly import __version__ as version\n\nwith open(\'README.md\') as readme_file:\n    readme = readme_file.read()\n\n# with open(\'HISTORY.md\') as history_file:\n#     history = history_file.read()\n\nrequirements = [\n    \'Flask==1.0.2\',\n    \'flask_cors==3.0.6\', \n    \'Flask-SocketIO==3.0.2\',\n    \'jsonmerge==1.5.2\'\n]\n\nsetup(\n    author="Italo Jos\xc3\xa9 G. de Oliveira",\n    author_email=\'italo.i@live.com\',\n    classifiers=[\n        \'Natural Language :: English\',\n        \'Programming Language :: Python :: 3\',\n        \'Programming Language :: Python :: 3.4\',\n        \'Programming Language :: Python :: 3.5\',\n        \'Programming Language :: Python :: 3.6\',\n        \'Programming Language :: Python :: 3.7\',\n    ],\n    description="This pkg encapsulate the base flask server configurations",\n    install_requires=requirements,\n    license="MIT license",\n    long_description=readme,\n    include_package_data=True,\n    keywords=\'appfly\',\n    name=\'appfly\',\n    packages=find_packages(),\n    url=\'https://github.com/italojs/appfly\',\n    version=version,\n    zip_safe=False,\n)\n
Run Code Online (Sandbox Code Playgroud)\n

小智 2

出现此错误的原因是setup.py从包中导入。这意味着 python 将在处理时尝试导入库setup.py(即在安装任何依赖项之前)。

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

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

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

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

...

使用执行:

version = {}
with open("...sample/version.py") as fp:
    exec(fp.read(), version)
# later on we use: version['__version__']
Run Code Online (Sandbox Code Playgroud)