在本地使用库而不是安装它

Posted

技术标签:

【中文标题】在本地使用库而不是安装它【英文标题】:Use a library locally instead of installing it 【发布时间】:2012-02-22 00:01:13 【问题描述】:

我用 python 编写了一个脚本,偶尔会向 Twitter 发送推文 它只使用一个名为tweepy 的库。安装库后它就可以工作了。

问题: 我想将脚本托管在我没有权限安装任何东西的服务器上 如果我可以将它从我所在的文件夹中包含在本地,那就太好了。 截至目前,我需要在文件顶部包含以下内容:

import tweepy

tweepy folder(确实有一个__init__.py 文件,我认为这很重要。

问题: 如何在不安装的情况下使用这个库? 基本上我想用import local_folder/tweepy/*替换:import tweepy

【问题讨论】:

我认为您需要的只是让 tweepy 文件夹在 sys.path 中可见,然后像往常一样使用 import tweepy__init__.py 文件的存在将使目录看起来是一个模块,并且该文件中的代码将在导入时运行(一次)。 【参考方案1】:

编辑:这个答案已经过时了。您应该使用VirtualEnv。如果您出于某种原因对第三方软件过敏(在这种情况下,您为什么要安装库?),有一个叫做 venv 的东西,它实际上是内置在 python3 中的,所以没有理由不使用某种的虚拟化。 (不过,大多数活跃在社区中的人更喜欢 VirtualEnv。请参阅 https://***.com/a/41573588/410889。)

VirtualEnv 安装一个本地 python 解释器,带有一个本地包文件夹和所有东西。除了这完全解决了管理权限问题之外,VirtualEnv 最重要的特性是它允许您将您的环境分开。如果您有一个项目需要 Foo 版本 2.3,而另一个项目需要 Foo 版本 1.5,则不能让它们共享同一个环境;您必须使用 VirtualEnv 将它们的环境分开。


有几种可能:

如果您已经知道如何安装 Python 模块,那么默认的 distutils 设置已经包含了每用户安装选项。只需运行 python setup.py install --user 而不是 python setup.py install。这是最简单的,因为这不需要添加任何源代码。

您也可以将tweepy的目录作为当前工作目录运行脚本。

您可以将名为 PYTHONPATH 的环境变量添加到用于运行脚本的任何环境(例如 shell)中,并使其包含 tweepy 的路径。

如果所有其他方法都失败了,并且您确实想编辑源代码,则需要编辑 sys.pathsys.path 是 Python 将查找代码的位置列表。

在你的代码中,写:

import sys
sys.path.append("/path/to/your/tweepy/directory")

import tweepy

【讨论】:

如果你想强制使用本地库而不是默认库怎么办?如果模块已经安装在系统上,python 将不会根据模块搜索路径查找本地模块。 docs.python.org/2/tutorial/modules.html @JeffTsui 好吧,默认情况下, sys.path 中的第一个条目是当前目录,因此通过从与模块相同的目录运行,它将始终加载。您还可以对 sys.path 进行任意修改;这只是一个清单。不过,从链接的措辞来看,我认为没有任何方法可以使用与内置模块同名的本地库。 @JeffTsui 另外,在我发布此答案后的几年经验中,我想说您对任何与路径相关的问题的回答是您应该使用 virtualenv,作为其中之一其他回答者建议如下。 VirtualEnv 基本上是当今管理 Python 环境的 One True Way™。 你从哪里得到“过敏”?【参考方案2】:

简单干净的解决方案:

import sys
sys.path.insert(0, '/absolute/path/to/package')
import some.cool.package

some.cool.package.doCoolStuff()

“附加”的其他答案也不适用于已安装的软件包

【讨论】:

【参考方案3】:

您应该安装virtual python environment,这样您就不必担心拥有管理员权限,并且您可以安装任何您想要的东西。

【讨论】:

这可能不是所有构建的一个选项。考虑是否有人将他们的库部署到不同的平台;你会要求他们也安装这个吗? +1 不是一个完整的解决方案,但对于大多数用例来说是一个很好的解决方案。【参考方案4】:

另外,如果您想像在 script 中那样频繁使用它。 在 bashrc/zshrc 文件中导出“PYTHONPATH”并提供包含代码的目录的简单方法。

例如:

export PYTHONPATH=$PYTHONPATH:$HOME/path/to/module

这样你就不需要每次重启都做 sys.path 了。

快乐编码

【讨论】:

【参考方案5】:

选项 1:venv

只需使用venv 创建一个虚拟环境并将其安装在其中:

$ python -m venv venv
$ source venv/bin/activate

# Form here on, pip is the pip from venv!
$ pip --version
pip 20.3 from /home/math/venv/lib/python3.8/site-packages/pip (python 3.8)
$ pip install tweepy

选项 2:--用户

--user在用户目录下安装包

$ pip install tweepy --user

【讨论】:

以上是关于在本地使用库而不是安装它的主要内容,如果未能解决你的问题,请参考以下文章

有没有什么办法可以将我的存储库下载为zip并添加到我的本地存储库而不是使用git(repo snc命令)?

如何使用本机 sqlite 库而不是 QSql 从 sqlite 插入和检索 QString

当我链接动态库而不是静态库时,CMake 有效

为啥使用 dotenv 库而不是解析 ini 文件?

是否可以覆盖本机 fetch api 以使用所需的 Promise 库而不是本机浏览器 Promise?

强制 CMake 寻找 x64 位库而不是 x32