python - setup.py 安装与 pip 安装

标签 python pip setuptools python-3.8

我想创建一个 python 包,它将在构建运行时从其 git 存储库中克隆,因此我将在构建代理中拥有源代码。然后我想将 python 包作为命令行工具运行,该包称为 environment_manager

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

我发现,如果我简单地使用 pip install . 安装,那么我实际上能够从命令行使用该工具并且它可以工作。我不明白有什么区别,或者为什么这只在执行 pip 安装方法时有效。

下面是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 安装它是正确的(因为当我键入 pip list 时包出现的两种方式)并且在那里我的 setup.py 脚本有什么问题吗?该脚本取自 pypa 示例项目,我删除了大部分不需要的内容。

最佳答案

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


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

关于python - setup.py 安装与 pip 安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64435188/

相关文章:

Pythonnet 错误 : dynamic module not initialized properly

python - 带有正则表达式的映射列表

python - 无法在 Linux 上 pip 安装 psycopg2

python - setuptools.setup 对所有元数据关键字有何作用?

python - setup.py install_requires 应该包含 setuptools 的原因是什么?

javascript - 有没有办法从 javascript 更改 python 脚本中变量的值?

python - 按 'escape' 时离开 kivy 应用程序

python-2.7 - 安装tensorflow时获取 "No module named queue"

python - 如何在从源 Python 编译的上安装 Pip

installation - Inno Setup 的自定义页面向导