问题标签 [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 投票
30 回答
796682 浏览

python - 删除 pip 安装的所有软件包的最简单方法是什么?

我正在尝试修复我的一个 virtualenvs - 我想将所有已安装的库重置回与生产匹配的库。

有没有一种快速简便的方法可以用 pip 做到这一点?

0 投票
1 回答
1309 浏览

python - Python:单元测试模块和相关导入

当前具有以下文件层次结构:

我的第一个问题是关于相对进口的。假设在 \subpackage\work.py 中有一个名为 custom_function() 的函数,我想在 test_work.py 中测试该函数。出于某种原因,我无法弄清楚如何从一个模块导入到另一个模块。尝试from .. subpackage.work1 import custom_function()似乎不起作用,并产生错误Attempted relative import in non-package有没有办法解决这个问题?

2) 我想用一个函数从 run_everything.py 运行所有测试文件,会在每个 test_work*.py 文件中添加一个 suite() 函数,它将每个 unit_testing 类添加到 suite.addTest(unittest.makeSuite(TestClass)) ,最后将它们导入顶级run_everything.py是Python2.7中最常规的方式吗?

0 投票
2 回答
1702 浏览

python - Python包导入问题

我一直在为 Python 包导入而苦苦挣扎。我在网上搜索,但找不到合适的答案。

我有以下目录结构:

module.py 源代码只包含一行:

如果我去“包”目录,我可以导入包:

如果我去“。” 目录,我想导入模块(或包)如下:

但我得到了错误:

我需要在 __init__.py 文件中放入什么,才能进行上述导入?更多,我需要在 ./__init__.py 文件中放入什么,这样我才能从 ../ 目录导入我的项目?

如果可能的话,我想在不更改 sys.path 变量的情况下解决这个问题。

0 投票
5 回答
59359 浏览

python - 从子文件夹导入模块

我有以下文件排列:

我想导入我的模块a.py和. 为此,我使用了以下命令:b.pymain.pymain.py

但是,我无法从文件夹 1 导入模块(类似于文件夹 2)。

我收到一个错误:

没有名为 files.folder1 的模块

我不能使用导入命令,因为文件夹 1、文件夹 2、...中有很多 Python 文件

我在这里想念什么?

0 投票
1 回答
5957 浏览

python - 如何导入模块但忽略包的 __init__.py?

我正在尝试导入一个位于 Python 包内的模块中的函数,但是当我尝试时:

Python 执行包的 _ init _.py 但它不会发生。

有没有办法导入告诉 Python 忽略包的 _ init _.py 的函数?

0 投票
14 回答
392435 浏览

python - 十亿次相对进口

我来过这里:

还有很多我没有复制的 URL,一些在 SO 上,一些在其他网站上,当我认为我会很快找到解决方案时。

永远重复出现的问题是:如何解决这个“尝试在非包中进行相对导入”消息?

我在 pep-0328 上构建了该软件包的精确副本:

导入是从控制台完成的。

我确实在相应的模块中创建了名为 spam 和 egg 的函数。自然,它没有奏效。答案显然在我列出的第 4 个 URL 中,但对我来说都是校友。我访问的其中一个 URL 上有这样的响应:

相对导入使用模块的名称属性来确定该模块在包层次结构中的位置。如果模块的名称不包含任何包信息(例如,它被设置为'main'),那么无论模块实际位于文件系统上的什么位置,相对导入都会被解析为好像该模块是顶级模块一样。

上面的回复看起来很有希望,但对我来说都是象形文字。所以我的问题是,如何让 Python 不返回给我“尝试在非包中进行相对导入”?据说有一个涉及-m的答案。

有人可以告诉我为什么 Python 会给出该错误消息,“非包”是什么意思,为什么以及如何定义“包”,以及用幼儿园儿童容易理解的术语给出的准确答案

0 投票
2 回答
10289 浏览

python - 如何轻松分发具有 Python 模块依赖项的 Python 软件?在 Unix 上安装 Python 包的挫折

我的目标是分发一个 Python 包,其中包含其他几个广泛使用的 Python 包作为依赖项。我的包依赖于编写良好的、带有 Pypi 索引的包,如 pandas、scipy 和 numpy,并在 setup.py 中指定需要某些版本或更高版本,例如“numpy >= 1.5”。

我发现对于不是Python 打包专家(即使他们知道如何编写 Python)的精通 Unix 的用户来说,安装像我这样的包是非常令人沮丧和几乎不可能的,即使在使用应该易于使用的包管理器时也是如此. 我想知道是否有人可以提供这个痛苦过程的替代方案,或者我的经验是否只是反映了 Python 打包和分发当前非常困难的状态。

假设用户将您的软件包下载到他们的系统上。大多数人会尝试“天真地”安装它,使用类似的东西:

因为如果你在谷歌上搜索安装 Python 包的说明,通常会出现这种情况。对于绝大多数用户来说,这将失败,因为大多数用户在他们的 Unix/Linux 服务器上没有 root 访问权限。通过更多搜索,他们会发现“--prefix”选项并尝试:

--prefix由于用户不了解 Python 打包的复杂性,他们会选择任意目录作为"~/software/mypackage/". 它不会是所有其他 Python 包所在的干净策划的目录,因为同样,大多数用户并不知道这些细节。如果他们安装另一个包“myotherpackage”,他们可能会通过它"~/software/myotherpackage",你可以想象这将如何导致令人沮丧的黑客攻击PYTHONPATH和其他并发症。

继续安装过程,一旦用户尝试使用该包,调用"setup.py install"with"--prefix"也将失败,即使它似乎已正确安装,因为可能缺少其中一个依赖项(例如 pandas、scipy 或 numpy)和一个包不使用管理器。他们将尝试单独安装这些软件包。即使成功,PYTHONPATH由于给定的非标准目录,包将不可避免地不在"--prefix",耐心的用户将涉足其修改PYTHONPATH以使依赖项可见。

在这个阶段,精通 Python 的朋友可能会告诉用户,他们应该使用包管理器"easy_install"(主流管理器)来安装软件并处理依赖关系。安装后"easy_install",这可能很困难,他们会尝试:

这也会失败,因为用户通常没有权限在生产 Unix 服务器上全局安装软件。通过更多阅读,他们将了解该"--user"选项,并尝试:

他们会得到错误:

他们会非常困惑,为什么他们easy_install没有--user选项,而在线上有明确的页面描述了该选项。他们可能会尝试将其升级easy_install到最新版本并发现它仍然失败。

如果他们继续咨询Python打包专家,他们会发现有两个版本easy_install都命名为“easy_install"以便最大程度地混淆”,但一个是“distribute”,另一个是“setuptools”。恰好是只有"easy_install"支持和"distribute"绝大多数"--user"服务器/系统管理员安装"setuptools"easy_install所以本地安装是不可能的。请记住,对于非 Python 包管理专家的人来说,和之间的这些区别"distribute""setuptools"没有意义的并且难以理解。

在这一点上,即使是尝试安装我的软件包的最坚定、最精明和耐心的用户,我也会失去 90% 的用户——这是理所当然的!他们想安装一个碰巧用 Python 编写的软件,而不是成为最先进的 Python 包分发方面的专家,这太令人困惑和复杂了。他们会放弃并为浪费的时间感到沮丧。

继续询问更多 Python 专家的极少数用户将被告知他们应该pip/virtualenv使用easy_install. 安装pipvirtualenv弄清楚这些工具是如何工作的,以及它们与传统"python setup.py""easy_install"调用的不同之处本身就是耗时且困难的,对于只想安装一个简单的 Python 软件并使用它的用户来说,要求也太高了。即使是那些追求这条道路的人也会对他们安装的任何依赖项是否仍然可用easy_install或者是否需要从头开始重新安装所有依赖项感到困惑。setup.py install --prefixpip/virtualenv

如果一个或多个有问题的包依赖于安装与默认版本不同的 Python 版本,则此问题会更加严重。确保您的 Python 包管理器使用的是您想要的 Python 版本,以及确保所需的依赖项安装在相关的 Python 2.x 目录而不是 Python 2.y 中的困难,将让用户无休止地感到沮丧,以至于他们肯定会在那个阶段放弃。

有没有更简单的方法来安装 Python 软件,不需要用户深入研究 Python 包、路径和位置的所有这些技术细节?例如,我不是 Java 大用户,但我偶尔会使用一些 Java 工具,并且不记得曾经担心我正在安装的 Java 软件的 X 和 Y 依赖关系,而且我不知道 Java 是如何打包的管理作品(我很高兴我不这样做——我只是想使用一个碰巧用 Java 编写的工具。) .

是否有 Python 的等价物?以一种不依赖于用户必须追逐所有这些依赖项和版本的方式分发软件的方法?一种可能将所有相关包编译成独立的东西的方法,可以下载并用作二进制文件?

我想强调的是,即使将软件包分发给精通的 Unix 用户的狭隘目标也会发生这种挫败感,这使问题变得更简单,无需担心跨平台问题等。我假设用户精通 Unix,甚至可能了解 Python,但只是不了解(也不想被告知)Python 打包的来龙去脉以及不同包管理器的无数内部复杂性/竞争。这个问题的一个令人不安的特点是,即使您的所有 Python 包依赖项都是众所周知的、编写良好且维护良好的 Pypi 可用包(如 Pandas、Scipy 和 Numpy),它也会发生。这不像是我依赖于一些不是格式正确的包的晦涩依赖:相反,我使用的是许多人可能依赖的最主流的包。

对此的任何帮助或建议将不胜感激。我认为 Python 是一门很棒的语言,拥有很棒的库,但我发现几乎不可能以一种易于人们在本地安装并运行的方式分发我用它编写的软件(一旦它具有依赖项)。我想澄清一下,我正在编写的软件不是用于编程使用的 Python 库,而是具有用户作为单独程序运行的可执行脚本的软件。谢谢。

0 投票
2 回答
7343 浏览

python - Pip 不知道 numpy 安装在哪里

正在尝试卸载numpy。我试过了pip uninstall numpy。它告诉我它没有安装。但是,numpy仍然安装在/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy.

如何确保pip找到numpy包裹?

0 投票
3 回答
10315 浏览

setuptools - 从本地 pypi 索引中删除包

这与这个问题类似,但有一个例外。我想从我们的本地 pypi 索引中删除一些特定版本的包,这些索引是我过去使用以下命令上传的。

有任何想法吗?

0 投票
1 回答
14041 浏览

python - 导入如何在 IPython 中工作

我对 import 语句在 IPython 中的工作方式感到有些困惑。我通过网络搜索一无所获。

隐式相对导入适用于 Python 2,但我不知道 IPython for Python 3 是否仍然如此。

使用点语法的相对导入似乎根本不起作用:

导入使用点语法的模块似乎是不可能的:

在某处是否有一些简明的文档?