我想创建一个 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.py
和 setuptools
但它似乎更容易并且如果我只是用 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/