Iza*_*aya 9 packaging pip setup.py python-3.x pipenv
我希望能够在B的任何文件,要做到:import APackage。A 和 B 是两个不同的项目/包,它们是本地的。
如何构建、安装和升级 A 以便 B 能够调用 A 模块?如何做到这一点pip?与pipenv?
Iza*_*aya 21
使用 pip 20.2.2 和 pipenv 2020.6.2 在 python 3.6.9 上测试
pipenv install path/to/your/package
Pip和pipenv工作完全一样。为了确保您理解,pip是您的全局 Python 解释器的包管理器。您可以pip --version检查喜欢哪个python,pip。Pipenv是一个喜欢特定项目/文件夹的 venv 工具。
__init__.pyA 包的文件吗?是的。__init__.py如果您希望能够在 B 中导入 A,pip 和 pipenv 需要 A 中的一个文件(可以为空)。(即使最近版本的 python 不需要__init__.py,似乎 pip 和 pipenv 仍然需要它。)
是的。如果项目 A 的根目录中没有 setup.py 文件,pip 和 pipenv 将引发错误(即使您没有构建项目)。
-e吗?这取决于你想要什么。请参阅此处了解更多信息。
作为示例,我将使用此项目架构作为 A:
A/
| myPackage/
| __init__.py
| myfile.py (contains a hello() function)
| setup.py
| MANIFEST.in
Run Code Online (Sandbox Code Playgroud)
setup.py 文件包含以下内容(更多详细信息,请参见 setuptools 页面):
from setuptools import setup, find_packages
setup(
name="myName",
version="0.1",
packages=find_packages(),
)
Run Code Online (Sandbox Code Playgroud)
pip install [local path to my project folder (here A/)]
Run Code Online (Sandbox Code Playgroud)
然后你可以通过打开你的python shell来检查并执行:
import myPackage
Run Code Online (Sandbox Code Playgroud)
确保您的 pipenv 是正确的 Python 版本。您可以使用以下pipenv --python 3.6命令设置具有良好版本的新环境:命令。
pipenv install [local path to my project folder (here A/)]
Run Code Online (Sandbox Code Playgroud)
您可以通过执行以下操作进行验证:
pipenv shell
python
import myPackage
Run Code Online (Sandbox Code Playgroud)
那是更pythonic的方式。
要构建您的项目,请进入您的项目文件夹(此处为 A/)并运行以下命令:
python3 setup.py sdist
Run Code Online (Sandbox Code Playgroud)
它会创建一个dist/文件夹,在里面你会找到一个像 .zip 文件这样的 zip 文件A/dist/myName-0.1.0.tar.gz。然后你就可以安装它(并像以前一样验证)。
pip install [path to the zip file (here A/dist/myName-0.1.0.tar.gz)]
Run Code Online (Sandbox Code Playgroud)
pipenv install [path to the zip file (here A/dist/myName-0.1.0.tar.gz)]
Run Code Online (Sandbox Code Playgroud)
通过在 setup.py 中更改项目版本并再次构建它,您将在 dist 文件夹中找到另一个 zip 文件(以前的版本和新的构建版本)。要更改 pip 或 pipenv 可用的版本,您可以执行以下操作:
只需卸载软件包并重新安装新版本(给它创建的新 zip 文件)。
通过 Pipfile 中的新 zip 文件更改路径。为了避免并发错误,您可以简单地删除 Pipfile.lock。然后只需运行:
pipenv upgrade
Run Code Online (Sandbox Code Playgroud)
pip uninstall [value of field 'name' in setup.py (here myName)]
Run Code Online (Sandbox Code Playgroud)
我们想指定哪些函数/类可以从 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 文件。
| 归档时间: |
|
| 查看次数: |
5261 次 |
| 最近记录: |