标签: python-packaging

打包并查找python包中的非Python文件

我对 python 打包相当陌生,我正在尝试创建一个命令行工具,以便我可以发送给客户端以与 AWS 中的服务进行交互。

\n

我的目标是拥有一个命令行工具来将文件夹中的文件上传resources到 s3,稍后供其他服务使用。

\n

这是我第一次使用 setuptools 来实现这一点,但我似乎在某些时候迷失了方向。

\n

我的项目结构是这样的:

\n
ProjectRoot\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 MANIFEST.in\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Pipfile\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Pipfile.lock\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 dist\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 myscript-0.0.1.whl\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 myscript-0.0.1.tar.gz\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 resources\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 artifacts\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 code1.jar\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 code2.jar\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 api.keys\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package1.tar.gz\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 install-linux.sh\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 confs.yaml\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 recipe.template.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 code\n        \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 myscript.py\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试让 setuptools 将文件添加到带有 pyproject.toml 的 .tar 包中:

\n
[build-system]\nrequires = ["setuptools"]\nbuild-backend = "setuptools.build_meta"\n\n[project]\nname = "myscript"\nversion = "0.0.1"\ndependencies = [\n    'Click',\n    'boto3',\n    'botocore',\n]\n\n[project.scripts]\nmyscript …
Run Code Online (Sandbox Code Playgroud)

python setuptools python-packaging

3
推荐指数
1
解决办法
1151
查看次数

在 Langchain 中使用 DocArrayInMemorySearch 时出错:无法导入 docarray python 包

这是完整的代码。它在https://learn.deeplearning.ai/笔记本上运行得非常好。但是当我在本地计算机上运行它时,出现以下错误

ImportError:无法导入 docarray python 包

我尝试过重新安装/强制安装 langchain 和 lanchain[docarray] (pip 和 pip3)。我使用迷你 conda 虚拟环境。蟒蛇版本3.11.4

from langchain.vectorstores import DocArrayInMemorySearch
from langchain.schema import Document
from langchain.indexes import VectorstoreIndexCreator
import openai
import os

os.environ['OPENAI_API_KEY'] =  "xxxxxx" #not needed in DLAI

docs = [
    Document(
        page_content="""[{"API_Name":"get_invoice_transactions","API_Description":"This API when called will provide the list of transactions","API_Inputs":[],"API_Outputs":[]}]"""
    ),
    Document(
        page_content="""[{"API_Name":"get_invoice_summary_year","API_Description":"this api summarizes the invoices by vendor, product and year","API_Inputs":[{"API_Input":"Year","API_Input_Type":"Text"}],"API_Outputs":[{"API_Output":"Purchase Volume","API_Output_Type":"Float"},{"API_Output":"Vendor Name","API_Output_Type":"Text"},{"API_Output":"Year","API_Output_Type":"Text"},{"API_Output":"Item","API_Output_Type":"Text"}]}]"""
    ),
    Document(
        page_content="""[{"API_Name":"loan_payment","API_Description":"This API calculates the monthly payment for a loan","API_Inputs":[{"API_Input":"Loan_Amount","API_Input_Type":"Float"},{"API_Input":"Interest_Rate","API_Input_Type":"Float"},{"API_Input":"Loan_Term","API_Input_Type":"Integer"}],"API_Outputs":[{"API_Output":"Monthly_Payment","API_Output_Type":"Float"},{"API_Output":"Total_Interest","API_Output_Type":"Float"}]}]"""
    ),
    Document( …
Run Code Online (Sandbox Code Playgroud)

python python-packaging openai-api langchain

3
推荐指数
3
解决办法
4083
查看次数

没有名为“backport.configparser”的模块

我已经使用“pip install configparser”安装了 configparser 来获取 configparser-3.5.0,并且在我的 PYTHONPATH 上。但是当我将它用作“import configparser”时,我看到一个错误“No module named backports.configparser”。conigparser.py 使用这个 'backports' 模块,我在 python 路径下看到了 'backports' 模块,但不知何故它无法识别该模块。有人可以告诉我如何解决这个问题吗?这在我看来肯定是 configparser 的一些版本问题,但到目前为止我没有找到任何答案。帮助将不胜感激,谢谢

python configparser python-packaging

2
推荐指数
1
解决办法
8766
查看次数

如何在 Python 模块中查找类或函数?

我试图gen_dataset_ops在 tensorflow 中找到函数或类的定义,它的源代码在这里。我发现很多地方都是这样导入的:

from tensorflow.python.ops import gen_dataset_ops
Run Code Online (Sandbox Code Playgroud)

但我找不到它的定义位置,我希望找到类似的东西:

def gen_dataset_ops(...):
  #Do something clever
  return
Run Code Online (Sandbox Code Playgroud)

我一般不太了解python模块的解剖结构,所以我可能在这里缺少一些基础知识,..欢迎任何提示!

python module setuptools python-packaging

2
推荐指数
1
解决办法
634
查看次数

在 Google-Colaboratory 上使用自定义包

我正在尝试在 Google Colaboratory 上使用我的自定义包,但在执行此操作时遇到了一些奇怪的错误。请注意,我尝试使用的软件包在我的计算机上没有任何错误。

它是一个名为rohan. 它在功能方面非常基础。

起初我是通过 pip 命令 ( pip install rohan)安装的。但我有一个ModuleNotFoundError错误。

import rohan
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-1-9046ed7b4857> in <module>()
----> 1 import rohan

ModuleNotFoundError: No module named 'rohan'
Run Code Online (Sandbox Code Playgroud)

然后我从源代码安装了它。

%%bash
git clone https://github.com/rraadd88/rohan.git
cd rohan
pip install -e .
Run Code Online (Sandbox Code Playgroud)

这一次,我可以毫无错误地导入主模块 ( import rohan)。但是,如果我尝试导入子模块 ( dandage),则会得到ImportError.

from rohan import dandage
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-5-6ea35256170e> in <module>()
----> 1 from rohan import dandage …
Run Code Online (Sandbox Code Playgroud)

python python-3.x jupyter-notebook python-packaging google-colaboratory

2
推荐指数
1
解决办法
3180
查看次数

如何加快将 Git Repo 克隆到 Docker 容器的速度?

我有一些来自外部 Python 存储库的代码,我在 Dockerfile 中使用了这些代码。

RUN git clone ssh://git@foobar.com/sample_repo.git /sample_repo
Run Code Online (Sandbox Code Playgroud)

我怎样才能在 Docker 容器中(A)访问所有这些代码;(B) 比 快得多git clone;(C) 在存储库中获取最近的代码更改?

在我走上创建私有 Python 包存储库的道路之前,我想确保我实现了一个与 Docker 和上述所有因素都很好的解决方案。

python docker dockerfile python-packaging

2
推荐指数
1
解决办法
997
查看次数

如何执行zip格式的python包

我想创建一个python zipfile并执行它。

\n\n

我所做的是,首先创建以下目录和源文件:

\n\n

目录树

\n\n
pkgtest/\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pkga\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __main__.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

__main__.py

\n\n
print("SADASD")\n
Run Code Online (Sandbox Code Playgroud)\n\n

__init__.py:空

\n\n

此时,我可以这样做:

\n\n
python pkga\n
Run Code Online (Sandbox Code Playgroud)\n\n

它有效,但如果我运行以下命令:

\n\n
python -m zipfile -c pkga.zip pkga   # This generates a pkga.zip file\npython pkga.zip\n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到以下错误:

\n\n

/usr/bin/python: can\'t find \'__main__\' module in \'pkga.zip\'

\n\n

我缺少什么?

\n\n

编辑

\n\n

这样做:

\n\n
python3 -m zipapp pkga\n
Run Code Online (Sandbox Code Playgroud)\n\n

进而

\n\n
python3 pkga.pyz\n
Run Code Online (Sandbox Code Playgroud)\n\n

有用。

\n\n

但是,根据本教程,使用普通的 zip 文件就足够了。它是否正确?

\n

python python-packaging

2
推荐指数
1
解决办法
3347
查看次数

具有相同顶级名称的不同 python 包

如果我安装两个具有相同顶级目录级别名称但不同包名称(由 setup.py 或其他识别方法定义)的 python 包,会发生冲突还是“命名空间”会被合并?

例如,如果我有以下结构:

repo1
    mypkg/
        __init__.py
        compiler/...
setup.cfg -> name=repo1

repo2
    mypkg/
        __init__.py
        runner/...
setup.cfg -> name=repo2
Run Code Online (Sandbox Code Playgroud)

我可以安装这两个而不发生冲突吗?如果是,我可以像这样导入它们吗:

from mypkg.runner import *
from mypkg.compiler import *
Run Code Online (Sandbox Code Playgroud)

python setuptools setup.py python-packaging

2
推荐指数
1
解决办法
865
查看次数

使用生成的 Python 文件构建包

问题陈述

\n

构建 Python 包时,我希望构建工具自动执行步骤来生成必要的 Python 文件并将它们包含在包中。

\n

以下是有关该项目的一些详细信息:

\n
    \n
  • 项目存储库仅包含手写的Python和YAML文件
  • \n
  • 要获得功能齐全的包,必须将 YAML 文件编译为 Python 脚本
  • \n
  • 一旦从 YAML 生成 Python 文件,就不再需要编译它们所需的程序(构建依赖项)。
  • \n
  • 然后将手写的和生成的 Python 文件打包在一起。
  • \n
\n

然后该包将上传到 PyPI。

\n

我想实现以下目标:

\n
    \n
  • 当用户从 PyPI 安装包时,包运行所需的所有必需文件都包含在内,无需执行任何编译步骤
  • \n
  • 当用户签出存储库并使用 构建包时python -m build . --wheel,YAML 文件会自动编译为 Python 并包含在包中。需要编译器。
  • \n
  • 当用户签出存储库并从源安装包时,YAML 文件会自动编译为 Python 并安装。需要编译器。
  • \n
  • (很高兴有)当用户检出存储库并以可编辑模式安装时,YAML 文件将被编译为 Python。用户可以自由地修改生成的和手写的 Python 文件。需要编译器。
  • \n
\n

我有一个具有以下布局的存储库:

\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 <project>\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 <project>\n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 hand_written.py\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 specs\n\xe2\x94\x82           \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file.ksc (YAML file)\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 …
Run Code Online (Sandbox Code Playgroud)

setuptools setup.py python-packaging pyproject.toml

2
推荐指数
1
解决办法
768
查看次数

PyPI - 允许使用不同名称导入模块

我最近创建了一个简单的 python 包/库并将其上传到(PyPI)。没关系 - 我可以将我的项目上传到 pypi 并使用 pip 再次下载它,但我无法导入它,因为它包含一个句号. 我的包被调用dcode.py(这显然会导致导入问题),我想只需键入import dcode(不带)即可导入它.py。我已经四处寻找解决方案,但似乎找不到 - 我希望能够使用别名 ( dcode) 导入它,而不是dcode.py(这显然不起作用)。有没有办法做到这一点?我假设必须有(例如,两个包discord.pypy-cord都可以使用 导入import discord。有谁知道如何做到这一点?

以防万一您需要它,我的pyproject.toml文件如下所示:

[project]
name = "dcode.py"
version = "0.0.2"
authors = [
{ name = "Dylan Rogers", email = "opendylan@proton.me" },
]
description = "dcode - the Python package for everything"
readme = "README.md"
requires-python = ">=2.0"
classifiers = [
    "Programming Language :: …
Run Code Online (Sandbox Code Playgroud)

python pip python-import pypi python-packaging

2
推荐指数
1
解决办法
793
查看次数