【问题标题】: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 文件的存在将使目录看起来是一个模块,并且该文件中的代码将在导入时运行(一次)。

标签: python import module


【解决方案1】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-08
        • 2023-01-12
        • 2022-10-16
        • 1970-01-01
        • 1970-01-01
        • 2013-05-28
        • 2015-03-07
        • 1970-01-01
        相关资源
        最近更新 更多