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

Tre*_*key 58 python import module

脚本:
我在python中编写了一个脚本,偶尔会向Twitter发送推文
它只使用一个名为:tweepy
的库,安装它工作的库后,很棒.

问题:
我想在没有安装任何权限的服务器上托管脚本
如果我可以从我所拥有的文件夹中本地包含它,那将会很棒.
截至目前,我只需要包含在我的文件的顶部是:

import tweepy
Run Code Online (Sandbox Code Playgroud)

tweepy文件夹(也有一个__init__.py我认为是非常重要的文件.

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

这可能只是蟒蛇常识,但我卡住了!

Har*_*wEm 65

编辑:这个答案已经过时了.你应该使用VirtualEnv.如果你出于某种原因对第三方软件过敏(在这种情况下,你为什么要安装库?),有一种名为venv的东西,字面意思是内置在python3中,所以没有理由不使用某种虚拟化.(但社区中活跃的大多数人更喜欢VirtualEnv.请参阅/sf/answers/2910151191/.)

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.path.sys.path是Python将查找代码的位置列表.

在你的代码中,写:

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

import tweepy
Run Code Online (Sandbox Code Playgroud)

  • 如果您想强制使用本地库而不是默认库怎么办?基于模块搜索路径,如果模块已经安装在系统上,python 将不会查找本地模块。https://docs.python.org/2/tutorial/modules.html (2认同)
  • @JeffTsui嗯,默认情况下,sys.path中的第一个条目是当前目录,因此通过从与模块相同的目录运行,它将始终加载.您还可以对sys.path执行任意修改; 这只是一个清单.从链接的措辞来看,我认为没有办法使用与内置模块同名的本地库. (2认同)

use*_*569 14

简单干净的解决方案:

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

some.cool.package.doCoolStuff()
Run Code Online (Sandbox Code Playgroud)

'append' 的其他答案也不适用于已安装的软件包


Jon*_*Ong 8

你应该安装一个虚拟的python环境,这样你就不用担心拥有管理员权限了,你可以安装任何你想要的东西.

  • 这可能并非始终适用于所有构建。考虑是否有人将他们的库部署到不同的平台;你会要求他们也安装这个吗? (2认同)

iga*_*rav 6

此外,如果你想像脚本一样经常使用它.在bashrc/zshrc文件中导出"PYTHONPATH"的简便方法,并提供包含代码的目录的路径.

例如:

export PYTHONPATH=$PYTHONPATH:$HOME/path/to/module
Run Code Online (Sandbox Code Playgroud)

这样,每次重新启动时都不需要执行sys.path.

快乐的编码