setup.py install 与 pip install

ber*_*olo 3 python pip setuptools python-3.8

我想创建一个 python 包,当构建运行时,它将从其 git 存储库克隆,因此我将在构建代理中拥有源代码。然后我想将 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',
        ],
    }
)
Run Code Online (Sandbox Code Playgroud)

我的项目结构如下:

environment_manager
   /src
      conf/
      environment_manager/
         environment_controller.py
         config_parser.py
         command.py
      test/
         unit_tests.py
Run Code Online (Sandbox Code Playgroud)

我认为从命令行安装和运行该工具的正确方法是使用setup.py,setuptools但如果我只使用 pip 安装它,它似乎要容易得多并且实际上可以工作。

安装它是否pip过于setup.py正确(因为当我键入 时,包会以两种方式出现pip list),我的脚本是否有任何问题setup.py?该脚本取自 pypa 示例项目,我删除了大部分不需要的内容。

Had*_*tan 5

setup.py是一个 python 文件,它通常告诉您要安装的模块/包已使用 Distutils 打包和分发,Distutils 是分发 Python 模块的标准。这使您可以轻松安装 Python 包。通常这样写就足够了:$ pip install .


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