setup.py安装vs pip安装

问题描述

我想创建一个python软件包,在构建运行时将从其git repo中克隆它,因此我将把源包含在构建代理中。然后,我想将python软件包作为命令行工具运行,该软件包称为environment_manager

起初我以为我会按照教程来创建一个简单的setup.py,尽管事实证明这比我想象的要困难得多,而且每当我运行python setup.py install --force时我都无法使用安装的软件包,通常找不到模块或在键入命令时无法识别该命令。

我发现,如果仅使用pip install .进行安装,则实际上可以从命令行使用该工具,并且可以正常工作。我不知道有什么区别,或者为什么这仅在执行pip install方法时有效。

下面是setup.py文件,我看不出有什么问题:

from setuptools import setup,find_packages,find_namespace_packages
import pathlib

here = pathlib.Path(__file__).parent.resolve()

# Get the long description from the README file
long_description = (here / 'README.MD').read_text(encoding='utf-8')

setup(
    name='environment_manager',version='1.0.0',package_dir={'': 'src'},packages=find_namespace_packages(where='src',include='environment_manager.*'),python_requires='>=3.8,<4',install_requires=['boto3','botocore','pyyaml'],extras_require={
        'dev': ['pre-commit','black','pylint'],'test': ['pytest','pytest-mock','coverage'],},entry_points={
        'console_scripts': [
            'environment-manager=environment_manager.environment_controller:main',],}
)

我的项目结构如下:

environment_manager
   /src
      conf/
      environment_manager/
         environment_controller.py
         config_parser.py
         command.py
      test/
         unit_tests.py

我认为从命令行安装和运行该工具的正确方法是使用setup.pysetuptools,但如果将其安装在以下位置,它似乎要容易得多并且可以正常工作点子。

pip上使用setup.py进行安装是否正确(当键入pip list时,软件包同时出现),并且setup.py脚本是否存在问题?该脚本来自pypa示例项目,我删除了大部分不需要的内容

解决方法

pip是一个软件包管理器,可以帮助安装,管理和卸载Python软件包。它在PyPI上搜索它们,下载它们,然后运行其setup.py脚本。

由于您提到可以在安装pip之后运行二进制可执行文件,但不能进行setup.py安装,因此它们中的每一个都可能会将二进制文件安装到单独的位置。

我要检查的一件事是您使用的是同一版本的Python中的pythonpip,例如:

% python --version
Python 3.8.6
% pip --version
pip 20.1.1 from /usr/lib/python3.8/site-packages/pip (python 3.8)

如果其中列出了不同的Python版本,则它们可能会安装到两个单独的目录-一个在您的PATH环境变量中,另一个不在。

接下来,我将在每种安装方法之后检查pip list -v,因为这应该列出一个Location标头,告诉您该软件包的安装位置。

,

setup.py 是一个python文件,通常告诉您要安装的模块/软件包已与Distutils打包并分发,Distutils是分发Python模块的标准。这使您可以轻松安装Python软件包。通常只需写:$ pip install .


换句话说, setup.py 是打包文件,而 pip 是包管理器,因此您应该具有 setup.py 文件能够使用 pip 安装。