使用没有安装的python模块

时间:2015-09-03 09:02:10

标签: python module

我正在编写一个使用MySQLdb和pymssql模块的脚本。我使用的是python 2.7。 我需要在计算机(Linux)上运行此脚本,我无权安装模块或添加到路径变量。

我正在考虑使用语法导入,但看起来它正在寻找两个模块中任何一个都不存在的.py文件。

我收到错误: '没有名为pymssql的模块' 从pymssql导入pymssql'或者来自pymssql import *'。 (pymssql是一个包含pymssql源zip文件的目录)。

编辑: 该脚本将在多个主机上运行,​​因此我试图避免任何类型的安装。

2 个答案:

答案 0 :(得分:1)

您通常可以使用

在本地安装软件包
$ python setup.py install --user

这不需要安装权限。

另一种方法是设置(或添加)你的PYTHONPATH。在bash:

$ export PYTHONPATH=${PYTHONPATH}:/path/to/package-base

包“base”目录通常是以包命名的子目录,而例如setup.py通常位于一个目录中。

如果您不喜欢改变环境,可以将其改为一次性:

$ PYTHONPATH=${PYTHONPATH}:/path/to/package-base python /some/script.py

您可以将其包含在包含冗长的第一部分的别名中。

最后,您还可以尝试创建Python virtual environment。有关详情,请参阅链接文档,或搜索。

答案 1 :(得分:1)

您可以尝试将所有依赖项复制到一个特殊的文件夹,您自己的app-packages左右,然后在程序的开头,将每个依赖项的路径添加到sys.path这样进口就可以了。当然,当您分发代码时,您必须包含所需所有软件包的“硬拷贝”,即app-packages

这样的事情:

# At the beginning of your programme
import sys
sys.path.extend([all the paths of your packages inside of app-packages])

这应该不难自动化。您可以扫描app-packages中的所有元素并将它们添加到路径中。 (可选)对.egg.zip等扩展进行过滤。有些未经测试的代码可能是:

import os
import sys
dep_folder = 'app-packages'  # asuming your main script is placed where app-packages is
dependencies = [os.path.join(dep_folder, dep) for dep in os.listdir(dep_folder)]  # optionally you can filter here

sys.path.extend(dependencies)

这样,当稍后点击import pymssql时,导入机制也会查看您添加的路径。

另一种选择是使用virtual environment。那里通过pip安装依赖项没有任何问题,但我希望不容易分发。