当前位置: 首页 > 知识库问答 >
问题:

使用 pip 和 pipenv 构建和安装本地包

东郭淇
2023-03-14

我希望能够在 B 的任何文件中执行:导入 APackage。A 和 B 是两个不同的项目/包,它们是本地的。

如何构建、安装和升级A,以便B能够调用A模块?如何使用pip执行此操作?而使用pipenv

共有1个答案

单于海荣
2023-03-14

在python 3.6.9上使用pip 20.2.2和pipenv 2020.6.2进行测试

pipenv安装路径/to/your/package

< code>Pip和< code>pipenv的工作原理完全相同。为了确保您理解,pip是您的全局python解释器的包管理器。您可以执行< code>pip - version来检查pip喜欢哪个python。Pipenv是一个类似于特定项目/文件夹的venv工具。

对pip和pipenv需要<code>__init__。如果您想在B中导入A,则在A中的py文件(可以是空的)。(即使最新版本的python不需要__init__.py,pip和pipenv似乎仍然需要它。)

是的。如果项目A的根目录下没有setup.py文件(即使您没有构建项目), pip和pipenv将引发一个错误。

这取决于你想要什么。有关更多见解,请参阅此处。

作为示例,我将使用此项目体系结构进行:

A/
 | myPackage/
      | __init__.py
      | myfile.py (contains a hello() function) 
 | setup.py
 | MANIFEST.in

setup.py文件包含以下内容(setuptools页面提供更多详细信息):

from setuptools import setup, find_packages
setup(
    name="myName",
    version="0.1",
    packages=find_packages(),
)
pip install [local path to my project folder (here A/)]

然后,您可以通过打开python shell进行检查,并执行以下操作:

import myPackage

确保您的pipenv是正确的python版本。您可以使用< code>pipenv - python 3.6命令设置一个具有良好版本的新env。

pipenv install [local path to my project folder (here A/)]

您可以通过以下操作进行验证:

pipenv shell
python
import myPackage

这是更蟒蛇的方式。

要构建项目,请进入项目文件夹(此处为 A/)并运行以下命令:

 python3 setup.py sdist

它将创建一个dist/文件夹,在里面你会发现一个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)]
 pipenv install [path to the zip file (here A/dist/myName-0.1.0.tar.gz)]

通过在setup.py中更改项目的版本并重新构建它,您将在您的dist文件夹中找到另一个zip文件(以前的版本和新的构建版本)。要更改pip或pipenv中可用的版本,您可以执行以下操作:

只需卸载软件包并重新安装新版本(为其提供创建的新 zip 文件)。

通过Pipfile中的新zip文件更改路径。为了避免并发错误,您可以简单地删除您Pipfile.lock.然后简单地运行:

pipenv upgrade
pip uninstall [value of field 'name' in setup.py (here myName)]

我们想指定哪个函数/类可以从B访问,哪个不可以。

一种方法是在对象名称的开头使用前导下划线,这意味着:内部对象,不应该被导入),如PEP 8中所述。

另一种方法是简单地使用您的__init__.py文件。在我们的例子中,如果我们这样做__init__.py从myPackage.myfile导入hello。然后,在 B 项目中,你可以做:从 myPackage 导入 hello。使用空__init__.py文件,您需要编写:从myPackage.myfile导入hello,假设您知道项目A的内部结构。

你应该像这里解释的那样使用MANIFEST.in文件。

 类似资料:
  • 我试图在我正在分发的包中创建所需的库。它需要SciPy和NumPy库。在开发过程中,我使用 它安装了SciPy 0.9。0和NumPy 1.5。1,而且效果很好。 我想使用-执行同样的操作,以便能够在设置中指定依赖项。我自己的包裹。 问题是,当我尝试时: 它很好用。 但是 惨败 我如何让它工作?

  • 问题内容: 我正在尝试在要分发的程序包中创建所需的库。它需要SciPy和NumPy库。在开发过程中,我同时使用 它安装了SciPy 0.9.0和NumPy 1.5.1,并且运行良好。 我想使用-做同样的事情,以便能够在我自己的包的setup.py中指定依赖项。 问题是,当我尝试: 它工作正常。 但是之后 惨败 我该如何工作? 问题答案: 我假设我的回答是Linux经验。我发现要顺利进行有三个先决条

  • Elasticsearch是一款开源的数据搜索引擎和数据分析引擎,不同于WordPress的搜索,它是noSQL搜索引擎,没有数据库数据表,而是将数据以JSON格式存储在文件里,搜索效率远高于WordPress基于SQL的搜索方式,特别适合大型WooCommerce电商网站,或者做搜索推荐关键词的功能。想了解它,最好的方法是本地安装一个,自己动手试一试。 安装Elasticsearch 下载Ela

  • 我有一个包,我想构建到一个docker映像,这取决于我系统上的一个相邻包。 我的如下所示: 当我在virtualenv中调用时,这很好。但是,如果我在Dockerfile中调用它,例如:

  • 我必须下载一个git python回购和安装,因为pypi版本不更新。 通常我会这样做: 现在,我已将回购克隆到以下文件夹中: /opt/mypackage 那么,我如何运行来安装下面的不是使用pypi版本而是本地版本呢? 有可用的pip标志,我不知道如何实现:

  • 我正在使用管理版本,ala PEP 440。 我已将几个版本上载到私有存储库: 我的问题是现在当我使用 我得到的版本是当我期望得到。 有没有办法让pip忽略“本地版本”,只安装准确的版本,而不必上传到不同的索引(即staging和stable)? 编辑: 我已尝试使用和标志,但问题仍然存在;皮普更喜欢0.0。2版本到0.0版本。2版本。 附加编辑: 我使用的是和python2.7