问题标签 [python-packaging]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
303 浏览

python - 通过 Cython 编译 Python 包

我对 cython 相当陌生,有谁知道如何通过 Cython 编译 python 项目(开销相对较低),因为我不断收到以下导入错误:

ImportError:没有名为 CythonRelated.testSource.MyClassObject 的模块

我的测试项目结构是这样的:

MainCythonTest 从 MyClassObject 模块导入类(通过

from CythonRelated.testSource.MyClassObject import myCustomObj

),初始化一个对象并调用一个对象方法。

我的 setup.py 看起来像这样:

我错过了什么?

将 setup.py 放在 CythonRelated 之外(显然在 cythonize 中更新 *.pyx 文件的相应路径)也无济于事

我的类对象.py

MainCythonTest.py

0 投票
2 回答
3103 浏览

python - 防止软件包安装在旧的 Python 版本上

当使用不受支持的 Python 版本时,我们可以在setup.py文件中放入什么来防止 pip 收集和尝试安装包?

例如magicstack,一个使用 trove 分类器列出的项目:

pip --version因此,如果与 python 2.7 相关,我期望以下行为:

但实际行为是 pip 收集一个版本,下载它,尝试安装它,然后失败。例如,还有其他仅限 Python3 的版本,curio它们实际上安装得很好——因为setup.py没有使用任何特定于 Python 3 的东西——只是在使用某些仅限 Python 3 的语法时在导入时失败。而且我确定有些软件包可以安装,导入正常,并且可能只会在运行时失败!

以 pip 尊重的方式指定支持的 Python 版本的正确方法是什么? 我找到了一种解决方法,只涉及上传一个轮子文件,并拒绝上传一个 .tar.gz 发行版,但我很想知道正确的修复方法。


编辑:如果 Python/os/architecture 不匹配 ,pip 如何知道不下载轮子分发?它只是使用.whl 文件名约定还是比幕后发生的更复杂?我们能否以某种方式将元数据提供给源分发,以使 pip 对 .tar.gz 上传做正确的事情?

0 投票
0 回答
725 浏览

flask - 使用 Flask 应用程序打包 Flask-Script 和 Flask-Migrate 实用程序

我有一个使用flaskwith的应用程序设计flask-sqlalchemy。为了在模型更改时控制数据库迁移,我使用flask-migrate包装 alembic 并在flask-script管理上下文中使用。

我正在尝试决定如何拆分包分发以实现以下目标

  1. 主应用程序包的最小依赖项集
  2. 允许为迁移和部署分发管理脚本和测试数据,可能使用辅助包,具体取决于主应用程序模块

项目结构如下

我的manage.py看起来像很多以下。这就是我通过将alembic对象附加到. 这也允许我在与一般烧瓶/应用程序配置相同的配置文件中控制迁移配置(因为配置上下文由管理器和 with 推送)flask-migrateMigratemanage.pyMigrate.init_app

应用程序子管理器myapp.database.database_manager启用这样的命令,例如python manage.py database create/drop/test_data使用 sqlalchemy 创建表并使用目录中的 test_data 填充表tests/,但不挂钩任何迁移脚本,并允许我使用应用程序配置上下文python manage.py migration init/revision/migrate/...执行flask-migrate/命令。alembic

我正在尝试分发此应用程序以部署在我们的内部服务器上。有两个分发用例,因为它们目前正在使用

  1. 安装新服务器

    • 安装源分发
    • 创建新的配置文件以反映数据库主机等。
    • 用于manage.py -c /path/to/config创建数据库表database create
    • 将 HTTP 服务器指向 wsgi.py
  2. 更新现有服务器

    • 更新源分布
    • 用于使用manage.py -c /path/to/server/config migration upgrade当前应用上下文提取数据库
    • 服务器继续指向wsgi.py

我想将此分发移动到轮子/包,以便我可以在我们的公司内部网上自动部署,所以我在这里看到的是我想将我的包拆分为myapp只有 Flask 框架依赖项和 wsgi 入口点的主包其中myapp-manage包括manage.pytestsmigrations目录。

因此,在完美世界中,应用程序将安装在具有全局配置文件的系统上,并且特定的管理用户将有权访问管理包以执行升级。

现在,我正致力于将分发与setup-app.pysetup-manage.py同一源分发中创建两个单独的包分开。有没有更合适的方法来使用烧瓶应用程序打包迁移和管理脚本?我已经翻阅了文档,虽然它很清楚如何打包烧瓶应用程序,但管理脚本和迁移的分发策略不太清楚。

0 投票
0 回答
181 浏览

python - 是否可以打包一个包含从 URL 下载的外部数据依赖项的 python 模块?

我正在使用 setuptools 来打包我的模块,该模块将经过训练的数据集用于 AI 应用程序。特别是,我使用vader_lexicon.txt的是在nltk 数据文件中找到的。

当您从 pip 安装 nltk 时,它不会自动为您下载数据集。您必须从命令行或 python 解释器手动执行命令来获取特定数据集。我怀疑他们这样做是因为包括所有数据集将是数百兆字节。

从 setuptools 的文档来看,包含数据文件的方法似乎是使用MANIFEST.in,但在这种情况下,您似乎需要将数据文件包含在源代码分发中。

有什么方法可以包含来自远程位置的数据?

0 投票
1 回答
4712 浏览

python - 跨包导入模块时 Python 'ImportError: No module named'

我遇到了一个 Python 'ImportError: No module named...' 错误,试图从另一个 Python 包中的模块导入另一个 Python 包中的 Python 模块。下图显示了目录结构:

通过 PyCharm 的项目目录结构

必须注意,仅当我从终端运行脚本时才会出现此错误,而通过 PyCharm 执行时,此脚本会成功运行。从终端执行时的错误如下:

我尝试了不同的导入方式,例如以下但没有任何成功:

方法一:

方法二:

这个问题的解决方案是什么?

0 投票
1 回答
668 浏览

python - python3本地文件的包路径

我有以下结构

现在 myfunc.py 有一个读取 myFile.csv 的函数

如果我在 func.py 中导入 foo,则路径“myFile.csv”不再正确。如何独立于正在导入 myfunc 的文件从 myFunc.py 引用 myFile.csv?

0 投票
1 回答
1198 浏览

python - 检查是否以“可编辑”(鸡蛋链接)模式安装了 python 包?

有什么方法可以检查 Python 包是否已正常安装(pip install/ setup.py install)或可编辑/鸡蛋链接模式(pip install -e/ setup.py develop)?

我知道我可以检查包的路径是否包含site-packages很可能意味着它是“不可编辑”的安装,但这感觉非常肮脏,我宁愿避免这种情况。


我试图检查这一点的原因是我的应用程序正在检查各个地方的配置文件,例如/etc/myapp.conf~/.myapp.conf. 对于开发人员我想签入,<pkgdir>/myapp.conf但由于我显示了可能的位置列表以防找不到配置,所以我真的不想在软件包安装到站点包时包含 pkgdir 选项(因为用户应该不要在那里创建配置文件)。

0 投票
2 回答
11023 浏览

python - 如何在 python 包中添加 cv2 作为要求?

我正在尝试制作自己的使用 OpenCV Python 模块的包cv2。但是,在使用 PyCharm 时,它会警告

不满足包装要求。

我怀疑这是因为我使用了推荐的复制/粘贴cv2.pyd到我的 python 目录的方法。请注意,pip install cv2 这不起作用。

什么是确保在引入此包时满足要求的正确方法?

编辑:

我的 setup.py 文件如下

这是尝试打包我的代码时出现错误的地方。通常我导入 numpy 或 cv2 没有问题。我使用 pip 安装了 Numpy,并通过上述方法安装了 cv2。如果我只使用 cv2 运行脚本,一切都会正常工作,但正是这种包装欺骗了我。

0 投票
1 回答
1293 浏览

python - ImportError 无法导入名称 - 非特定

我已经从 https://github.com/raamana/pyradigm制作了 python 包, 并使用以下命令将其上传pip(在遵循 pypi 等说明之后):

理论上,现在应该可以做到

(我可以确认有效),然后在 Python 文件中执行以下操作:

使用MLDatasetpyradigm


不幸的是,情况并非如此,因为 Python 抛出了以下ImportError相当不具体的内容:

我可以确认

  1. 我能够通过 pip 在新系统上安装 pyradigm
  2. pip 和 python 都能够找到包(安装在站点包中),因为它们会自动填充模块名称(pyradigm和类名MLDataset)。

pyradigm 中的 setup.py 是这样的:

该软件包只有 3 个文件:

仅包含__init__.py一行:

任何有助于理解此错误以及修复它的方法将不胜感激。谢谢。

0 投票
1 回答
204 浏览

python - ImportError 如果作为包使用。包无法导入自己的模块

我有一个 pytestlib 包和模块如下:test.py 只是创建模块 2,模块 2 导入模块 1。如果编译并直接在其自己的文件夹中运行,test.py 代码将按预期工作。

模块1.py

模块2.py

测试.py

然而; 如果我制作这个,一个包,并从另一个项目导入,我会收到 ImportModule 错误。

externaltest.py(在另一个项目中)

导入系统

我有这个错误:

简而言之,制作包后,通过包的module2.py是找不到module1的。但是如你所见,module1可以通过externaltest.py直接导入。包不能导入自己的模块。