繁体   English   中英

setup.py 安装与 pip 安装

[英]setup.py install vs pip install

我想创建一个 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 安装它,它似乎更容易并且实际上可以工作。

使用pip over 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 Modules的标准。 这使您可以轻松安装 Python 包。 通常写下: $ pip install .就足够了$ pip install .


换句话说setup.py是一个打包文件而pip是一个包管理器,因此你应该有setup.py文件才能安装pip

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM