在不安装的情况下使用python模块

在不安装的情况下使用python模块,python,module,Python,Module,我正在编写一个使用MySQLdb和pymssql模块的脚本。我正在使用python 2.7。 我需要在没有权限安装模块或添加到path变量的计算机(Linux)上运行此脚本 我曾考虑使用import-from语法,但它看起来像是在寻找两个模块中都不存在的.py文件 我得到了一个错误: '没有名为pymssql的模块' 对于“从pymssql导入pymssql”或“从pymssql导入*”行。 (pymssql是包含pymssql源zip中的文件的目录) 编辑: 该脚本将在多台主机上运行,因此我试

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

我曾考虑使用import-from语法,但它看起来像是在寻找两个模块中都不存在的.py文件

我得到了一个错误: '没有名为pymssql的模块' 对于“从pymssql导入pymssql”或“从pymssql导入*”行。 (pymssql是包含pymssql源zip中的文件的目录)

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

您通常可以使用

$ python setup.py install --user
这不需要安装权限

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

$ export PYTHONPATH=${PYTHONPATH}:/path/to/package-base
软件包“基本”目录通常是以软件包命名的子目录,而例如
setup.py
通常位于上一个目录

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

$ PYTHONPATH=${PYTHONPATH}:/path/to/package-base python /some/script.py
您可以将其包装在一个别名中,其中包含冗长的第一部分



最后,您还可以尝试创建一个。有关详细信息,请参阅链接文档或四处搜索。

您可以尝试将所有依赖项复制到一个特殊文件夹中,您自己的
应用程序包
左右,然后在程序开始时,将每个依赖项的路径添加到
系统路径
,以便导入工作。当然,当您发布代码时,您必须包含所需所有软件包的“硬拷贝”,即
应用程序包

大概是这样的:

# At the beginning of your programme
import sys
sys.path.extend([all the paths of your packages inside of 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
时,导入机制也会查看您添加的路径


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

脚本将在不同的计算机上自动运行(相同的分发版本和相同的python版本安装,但不同的主机),因此我需要使此脚本尽可能独立。它可以与其他文件一起部署。包的本地安装的问题是它非常不可移植。。。有一次,我遇到了类似的情况,我真的很难在我的对等计算机上获取程序的依赖项。我试图避免任何合法安装,因为我无法控制哪台计算机将运行脚本。正如ikaros45所说,本地安装是用户特定的安装;因此,是的,它不适用于使用您的安装的其他用户。但在某种意义上,虚拟环境也是如此。PYTHONPATH将是您的解决方案。我正在考虑这个问题,但是脚本将在一些没有权限更改环境变量的用户的主机上运行……通过在命令行中预先添加PYTHONPATH,您始终可以运行不设置或更改环境变量的脚本:
PYTHONPATH=python
@JohnEllis,更改系统路径不需要任何权限,也不需要更改任何环境变量。它只是进程堆中的一个对象。当这个过程结束时,这些更改就不存在了。@Evert,问题是你必须创建一个批处理文件,在这个批处理中你必须定义你添加的每个鸡蛋的路径。我认为在运行时更新
sys.path
更好。@ikaros45我添加了路径,我打印了sys.path以确保它被添加,并且我得到的是“没有名为pymssql的模块”。我将pymssql-2.1.1.tat.gz解压缩到此路径,并添加了init.py。我错过什么了吗?