[英]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.py
和setuptools
但如果我只使用 pip 安装它,它似乎更容易并且实际上可以工作。
使用pip
over setup.py
安装它是否正确(因为当我键入pip list
时包出现的两种方式)我的setup.py
脚本是否有任何问题? 该脚本取自 pypa 示例项目,我删除了大部分不需要的内容。
pip
是一个包管理器,可以帮助安装、管理和卸载 Python 包。 它在 PyPI 上搜索它们,下载它们,然后运行它们的setup.py
脚本。
由于您提到您可以在pip
安装后运行二进制可执行文件,但不能在setup.py
安装后运行,因此很可能他们每个人都将二进制文件安装到不同的位置。
我要检查的一件事是您使用的是同一版本的 Python 中的python
和pip
,例如:
% 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.