如何让我的 Python 模块在 Linux 系统范围内可用?

Posted

技术标签:

【中文标题】如何让我的 Python 模块在 Linux 系统范围内可用?【英文标题】:How to make my Python module available system wide on Linux? 【发布时间】:2013-06-18 16:04:10 【问题描述】:

我自己做了一个小模块,我碰巧使用了很多。每当我需要它时,我只需将它复制到我想要使用它的文件夹中。由于我很懒,我想安装它,以便我可以从任何地方调用它,甚至是交互式提示。所以我在这里阅读了一些关于安装的信息,并得出结论我需要将文件复制到 /usr/local/lib/python2.7/site-packages。然而,这似乎并没有做任何事情。

有人知道我需要在哪里复制我的模块以使其在系统范围内工作吗?

【问题讨论】:

见site module documentation。许多人需要将.pth 路径配置文件添加到目录之一。 【参考方案1】:

您还可以拥有一个包含所有全局模块的文件夹,例如my_modules/ 然后本地化您正在使用的 Python 版本的 site-packages/ 文件夹(您可以使用以下命令轻松找到它:python -m site)。现在,cd 到此文件夹并创建一个扩展名为 .pth 的自定义文件。在此文件中,将绝对路径添加到包含要在系统范围内使用的所有模块的文件夹并保存。您的模块现在应该可用

【讨论】:

【参考方案2】:

几件事。

首先,模块必须(我相信)位于与模块名称匹配的目录中。

将该模块目录放在 PYTHONPATH 中的一个目录下(我使用 /usr/lib/pymodules/pythonV.x/)。您可以使用

在路径中找到合适的目录
import sys
print(sys.path)

来自 python 提示符。

【讨论】:

【参考方案3】:

答案是:一切都与权限有关

将文件放在正确的位置是不够的,例如:/usr/local/lib/python2.7/dist-packages,您还需要确保文件可以由您正在运行的进程读取,在本例中为 python。

确保“其他”用户对该文件具有读取权限。 打开 bash 控制台并执行:

sudo chmod o+r "yourmodule.py"
[Introduce the password]

在此之后再次进入 python 并尝试导入:

import "yourmodule"

只要 .py 文件所在的路径存在于 PYTHONPATH 中 + 该文件是可读的,那么您应该被允许导入它。

【讨论】:

【参考方案4】:

如果您使用的是 Ubuntu,请将文件复制到 /usr/local/lib/python2.7/dist-packages。 以下命令将告诉您复制的位置。

python -c "from distutils.sysconfig import *; print(get_python_lib())"

如果您是唯一使用该模块的人,请将文件复制到~/.local/lib/python2.7/site-packages

【讨论】:

那个命令给了我/usr/lib/python2.7/dist-packages,所以我把我的文件移到了那里。当我现在进入 Python 交互式提示并尝试导入 mymodule 时,我仍然收到 ImportError.. 这是正确的答案。您可以在此处放置一个指向位置输出的符号链接,它会立即生效。【参考方案5】:

在 Python 提示符下键入 sys.path 时列出的目录之一。您还可以通过修改PYTHONPATH 环境变量来添加包含您的文件的目录:

# ~/.bashrc file
export PYTHONPATH+=:/some/dir

【讨论】:

/usr/lib/python2.7/dist-packages 也在 sys.path 中,但是当我将文件移到那里并尝试从交互式 python 提示符导入它时,我仍然收到 ImportError。 . 文件名为mymodule.py,具有可执行权限。在交互式 Python 命令行上,我只需键入“import mymodule”。会不会有什么问题? 要么你的安装坏了,要么你试图从其他版本的python导入模块【参考方案6】:

有一些方法可以在系统范围内安装 Python 模块。你可能想看看distutils。 distutils2(当前版本)的一个很好的教程可以找到here。

你基本上必须写一个文件setup.py 告诉distutils 做什么。然后你可以简单地

python setup.py install

具有根权限以在系统范围内安装您的模块。有很好的简单示例,而且这是我能想象到的最简洁的方法。

【讨论】:

我已经看到了这个选项,但我认为如果我可以简单地做一个 'mv mymodule.py /some/directory' 就不需要创建这个设置脚本了。是不是无需创建整个设置脚本的简单方法? 可能它确实足以将其复制到包含在 sys.path 中的某个目录中,正如您已经尝试过的那样。但是,您还需要处理其他一些事情(例如文件权限,您检查了吗?),也许您需要在其他地方引用您的模块(我对此一无所知)。跨度> 那么,如何让python setup.py install复制代码到site-packages

以上是关于如何让我的 Python 模块在 Linux 系统范围内可用?的主要内容,如果未能解决你的问题,请参考以下文章

如何将python code 打包成linux系统下可执行?

如何使用 Python 让我的声卡发出声音?

python不会让我导入模块

Python 模块是如何工作的

如何在 boost::python 扩展模块中正确组合 C++ 和 Python 代码?

python模块gmpy2在linux下安装