gpt4 book ai didi

python-3.x - 使用 pip 和 pipenv 构建和安装本地包

转载 作者:行者123 更新时间:2023-12-03 13:49:56 33 4
gpt4 key购买 nike

我希望能够在 B 的任何文件中执行:import APackage . A 和 B 是两个不同的项目/包,它们是本地的。
如何构建、安装和升级 A 以便 B 能够调用 A 模块?如何使用 pip 执行此操作?和 pipenv ?

最佳答案

使用 pip 20.2.2 和 pipenv 2020.6.2 在 python 3.6.9 上测试
TL;博士pipenv install path/to/your/package序幕Pippipenv工作完全一样。为了确保您理解,pip是你的全局 python 解释器的包管理器。你可以做pip --version检查喜欢哪个python,pip。 Pipenv是一个喜欢特定项目/文件夹的 venv 工具。
我需要 __init__.py A 包的文件?
是的。 pip 和 pipenv 需要 __init__.py如果您希望能够在 B 中导入 A,则在 A 中的文件(可以为空)。(即使最新版本的 python 不需要 __init__.py ,似乎 pip 和 pipenv 仍然需要它。)
我需要 A 中的 setup.py 文件吗?
是的。如果项目 A 的根目录下没有 setup.py 文件,pip 和 pipenv 将引发错误(即使您没有构建项目)。
我需要使用选项-e吗? ?
这取决于你想要什么。 See here for more insights .
结构
例如,我将这个项目架构用于 A:

A/
| myPackage/
| __init__.py
| myfile.py (contains a hello() function)
| setup.py
| MANIFEST.in
setup.py 文件包含以下内容( setuptools page for more details):
from setuptools import setup, find_packages
setup(
name="myName",
version="0.1",
packages=find_packages(),
)
导入 A 而不构建它
pip
pip install [local path to my project folder (here A/)]
然后你可以通过打开你的 python shell 进行检查并执行以下操作:
import myPackage
管道
确保您的 pipenv 是正确的 python 版本。您可以使用以下命令设置具有良好版本的新环境: pipenv --python 3.6命令。
pipenv install [local path to my project folder (here A/)]
您可以通过执行以下操作进行验证:
pipenv shell
python
import myPackage
在导入之前构建您的项目
这是更 python 的方式。
要构建您的项目,请进入您的项目文件夹(此处为 A/)并运行以下命令:
 python3 setup.py sdist
它将创建一个 dist/文件夹,在里面你会找到一个像 A/dist/myName-0.1.0.tar.gz 这样的 zip 文件。 .然后您可以安装它(并以与以前相同的方式进行验证)。
pip
pip install [path to the zip file (here A/dist/myName-0.1.0.tar.gz)]
管道
 pipenv install [path to the zip file (here A/dist/myName-0.1.0.tar.gz)]
版本处理
通过在 setup.py 中更改项目的版本并再次构建它,您将在 dist 文件夹中找到另一个 zip 文件(以前的版本和新的构建版本)。要更改 pip 或 pipenv 可用的版本,您可以这样做:
对于 pip
只需卸载软件包并重新安装新版本(给它创建的新 zip 文件)。
对于 pipenv
通过 Pipfile 中的新 zip 文件更改路径。为了避免并发错误,您可以简单地删除您的 Pipfile.lock。然后简单地运行:
pipenv upgrade
卸载
pip uninstall [value of field 'name' in setup.py (here myName)]
管理模块可见性 ?
我们想指定哪些函数/类可以从 B 访问,哪些不能。
一种方法是在对象名称的开头使用前导下划线,这意味着:内部对象,不应该被导入),如 PEP 8 中所述.
另一种方法是简单地使用您的 __init__.py文件。在我们的例子中,如果我们在 __init__.py这个: from myPackage.myfile import hello .然后,在 B 项目中,你可以这样做: from myPackage import hello .带空 __init__.py您需要写入的文件: from myPackage.myfile import hello ,假设您知道项目 A 的内部结构。
从我的构建中排除文件和文件夹
您应该使用 MANIFEST.in 文件,如解释 here .

关于python-3.x - 使用 pip 和 pipenv 构建和安装本地包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63442168/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com