标签: python-packaging

如何从Python中的其他文件夹导入模块?

我有一个项目要结构如下:

myproject
  __init__.py
  api
    __init__.py
    api.py
  backend
    __init__.py
    backend.py
  models
    __init__.py
    some_model.py
Run Code Online (Sandbox Code Playgroud)

现在,我想同时在api.py和backend.py中导入some_model.py模块。如何正确执行此操作?我试过了

from models import some_model
Run Code Online (Sandbox Code Playgroud)

但是失败并显示为“ ModuleNotFoundError:没有名为'models'的模块”。我也试过

from ..models import some_model
Run Code Online (Sandbox Code Playgroud)

然后给我“ ValueError:尝试相对顶级包进行相对导入”。我在这里做错了什么?如何从其他目录(不是子目录)导入文件?

python python-3.x python-packaging

7
推荐指数
2
解决办法
9675
查看次数

无法在Windows上安装textract

当我尝试使用pip命令在Windows上安装textract软件包时,我尝试了很多东西但仍然失败了.

我收到以下错误:

错误

我不知道该怎么做,所以我会非常感激任何建议.谢谢

python windows install package python-packaging

7
推荐指数
1
解决办法
8953
查看次数

Python:一个存储库中有多个软件包,或者每个存储库中一个软件包?

我有一个庞大的Python 3.7+项目,目前正在将其拆分为多个可以单独安装的软件包。我最初的想法是拥有一个包含多个软件包的Git存储库,每个软件包都有自己的setup.py。但是,当在Google上进行一些研究时,我发现人们建议每个软件包一个存储库:(例如,Python-setuptools-处理两个相关的软件包(在一个仓库中?))。但是,没有人提供为什么他们喜欢这种结构的很好的解释。

因此,我的问题如下:

  • 在同一个GitHub存储库上拥有多个软件包(每个软件包都有自己的setup.py)的含义是什么?
  • 我要面对这样的设置问题吗?
  • 常见的Python工具(文档生成器,pypi打包等)是否与此类设置兼容?
  • 是否有充分的理由选择一种设置而不是另一种设置?
  • 请记住,这不是基于意见的问题。我想知道两种方法中的任何一种是否存在技术问题或问题。

另外,我知道(如果我错了,请纠正我),即使setup.py的GitHub URL不在存储库的根目录下,setuptools现在也允许从GitHub存储库安装依赖项。

python github setuptools python-3.x python-packaging

7
推荐指数
2
解决办法
1615
查看次数

如何在带有 if __name__='__main__' 块的 Python3 中使用相对导入?

我正在制作一个包,这个包中的模块在if __name__=='__main__':块中包含用于测试目的的代码。但是我尝试在这些模块中使用相对导入会导致错误。

我已经阅读了这个帖子和其他十亿人: 第 10 亿次的相对进口

在将其标记为重复之前,如果我想做的事情在 Python3 中是不可能的,那么我的问题是为什么它可以在 Python2 中工作,以及是什么促使决定在 Python3 中如此麻烦?


这是我的示例 Python 项目:

mypackage
- module1.py
- module2.py
- __init__.py
Run Code Online (Sandbox Code Playgroud)

__init__.py并且module2.py是空的

module1.py 包含:

import module2

# module1 contents

if __name__=="__main__":
    # Some test cases for the contents of this module
    pass
Run Code Online (Sandbox Code Playgroud)

这在 Python2 中工作正常。我可以从我计算机上任何位置的其他项目导入 module1,我也可以直接运行 module1 并if运行块中的代码。

但是,这种结构在 Python3 中不起作用。如果我尝试在其他地方导入模块,它会失败:

>>> from mypackage import module1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\_MyFiles\Programming\Python Modules\mypackage\module1.py", line …
Run Code Online (Sandbox Code Playgroud)

python relative-path python-import python-3.x python-packaging

7
推荐指数
2
解决办法
2613
查看次数

python setuptools 编译fortran代码并创建入口点

这是我的目录结构,

??? test
?   ??? test.f90
?   ??? __init__.py
?   ??? test.py
Run Code Online (Sandbox Code Playgroud)

现在我想用命令行工具制作一个包test。现在我有两个选择,1. numpy distutils 和 2. setuptools。

问题distutils在于它不支持入口点,现在也不推荐使用。但它确实完美地编译了 fortran 代码。现在对于 setuptools 我正在尝试使用此代码,

mod = Extension(name = 'foo.adt', sources = ['test/test.f90'])
setup(
  name = 'foo',
  packages = ['foo'],
  package_dir = {'foo':'test'},
  ext_modules = [mod],
  entry_points={
    'console_scripts': [
        'hello = foo.test:main',
    ],
  }
)
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用它,则会抛出此错误

error: unknown file type '.f90' (from 'test/test.f90')
Run Code Online (Sandbox Code Playgroud)

所以,我猜 setuptools 不支持 fortran 文件?那么,如何编译 fortran 代码、创建包并为其创建入口点?

python numpy setuptools setup.py python-packaging

6
推荐指数
1
解决办法
956
查看次数

我的 RST README 在 PyPi 上的格式不正确

我上传了一个包到 pypi.org,但我的 RST README 格式不正确。

这是 GitHub 上的样子:https : //github.com/NinjaSnail1080/akinator.py

这是 PyPi 上的样子:https ://pypi.org/project/akinator.py/

出于某种原因,在 GitHub 上一切都被正确格式化,但在 PyPi 上,它根本没有被格式化。它没有显示在 RST 中格式化的 README,它只是一堆未格式化的文本。

我尝试python3 -m twine check dist/*在我的项目上运行并得到这个:

Checking distribution dist/akinator.py-1.0.3.dev3-py3-none-any.whl: warning: `long_description_content_type` missing.  defaulting to `text/x-rst`.
Failed
The project's long_description has invalid markup which will not be rendered on PyPI. The following syntax errors were detected:
line 26: Error: Unexpected indentation.
Checking distribution dist/akinator.py-1.0.3.dev3.tar.gz: warning: `long_description_content_type` missing.  defaulting to `text/x-rst`.
Failed
The project's long_description has invalid …
Run Code Online (Sandbox Code Playgroud)

python pypi python-packaging twine

6
推荐指数
1
解决办法
1489
查看次数

Python setuptools:打包根目录(每个包不需要子目录)

我需要将一个包写入存储库,但它是一个小型快速包,因此我认为不需要将文件放入子目录中。我只是想要:

import mypkg.module1
Run Code Online (Sandbox Code Playgroud)

具有目录结构

root_folder/
    - setup.py
    - __init__.py  # the init for package "mypkg" (empty)
    - module1.py
Run Code Online (Sandbox Code Playgroud)

我不想被限制增加文件夹层次结构,如下所示:

root_folder/
    - setup.py
    - __init__.py  # the init for package "mypkg" (empty)
    - module1.py
Run Code Online (Sandbox Code Playgroud)
root_folder/
    - setup.py
    - mypkg/  # WHY would I do that for 1 module??
        - __init__.py
        - module1.py
Run Code Online (Sandbox Code Playgroud)

但结果是,import mypkg失败了,并且import module1工作了,而不是期望的import mypkg.module1

我发现了这个问题,但“只需将 setup.py 向上移动一个文件夹”的答案不适合我。

在此处找到设置参数文档后,我尝试定义一个命名空间包:

# Content of setup.py
from setuptools import setup

setup(name='MyPkg',
      packages=['mypkg'] …
Run Code Online (Sandbox Code Playgroud)

python setuptools python-packaging

6
推荐指数
1
解决办法
3633
查看次数

如何使用诗歌添加私人存储库?

使用Artifactory(https://cloud.google.com/artifact-registry)我打算添加对诗歌的依赖(https://python-poetry.org/docs/repositories/)。

我可以使用命令安装:(pip install --index-url https://us-central1-python.pkg.dev/<PROJECT_ID>/<SOME_LIB_REPO>/simple/ <PACKAGE_NAME>使用 keyrings.google-artifactregistry-auth 进行身份验证)

我打算使用 POETRY 来管理我的依赖项。我不知道使用诗歌是否会增加这种依赖性。poetry add --source <PACKAGE_NAME> https://us-central1-python.pkg.dev/<PROJECT_ID>/<SOME_LIB_REPO>我收到此错误:

poetry update
Updating dependencies
Resolving dependencies... (0.9s)

  RepositoryError

  401 Client Error: Unauthorized for url: https://us-central1-python.pkg.dev/<PROJECT_ID>/<SOME_LIB_REPO>/simple/pytest/
Run Code Online (Sandbox Code Playgroud)

我的 pyproject.toml

...

[[tool.poetry.source]]
name = "SOME_LIB"
url = " https://us-central1-python.pkg.dev/<PROJECT_ID>/<SOME_LIB_REPO>/simple/"
secondary = true
Run Code Online (Sandbox Code Playgroud)

这里有如何使用 PIP/VIRTUALENV 进行配置的详细信息:https://cloud.google.com/artifact-registry/docs/python/authentication但没有有关 Poetry 的详细信息。

您对此有什么建议吗?

python python-packaging python-poetry google-artifact-registry

6
推荐指数
1
解决办法
1090
查看次数

如何在 pyproject.toml 中指定 setuptools 入口点

我有一个像这样的 setup.py :

#!/usr/bin/env python

from setuptools import setup, find_packages

setup(
    name="myproject",
    package_dir={"": "src"},
    packages=find_packages("src"),
    entry_points={
        "console_scripts": [
            "my-script = myproject.myscript:entrypoint",
        ],
    },
)
Run Code Online (Sandbox Code Playgroud)

如何entry_points使用 setuptools 在 pyproject.toml 中编写该配置?

我猜测类似这样的事情,继续setuptools 的 pyproject.toml 文档,它说我需要在引用入口点的文档之后使用“INI 格式” ,但它似乎没有给出示例,我的猜测关于如何将 setuptools 语法与 pyproject.toml 语法结合起来是错误的(我从pip install -e .该报告中得到了回溯pip._vendor.tomli.TOMLDecodeError: Invalid value,指向entry-pointspyproject.toml 中的行):

[build-system]
requires = ["setuptools", "setuptools-scm"]
build-backend = "setuptools.build_meta"

[metadata]
name = "myproject"

[tool.setuptools]
package-dir = {"" = "src"}

[tool.setuptools.packages.find]
where = ["src"]

[tool.setuptools.dynamic]
entry-points …
Run Code Online (Sandbox Code Playgroud)

python program-entry-point setuptools python-packaging pyproject.toml

6
推荐指数
1
解决办法
4760
查看次数

Poetry add pkg 得到“HTTPResponse.__init__() 得到了意外的关键字参数‘strict’”

我使用 conda 使用 python 3.10.9 创建一个新环境。我使用 pip 安装了诗歌,在添加几个包后,该poetry add pkg命令不起作用并出现错误消息:

HTTPResponse.__init__() got an unexpected keyword argument 'strict'
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我用谷歌搜索了这个问题,但没有答案,如何解决?

让诗歌添加命令正常工作

python python-packaging python-poetry

6
推荐指数
1
解决办法
2090
查看次数