我正在编写一个使用MySQLdb和pymssql模块的脚本。我使用的是python 2.7。 我需要在计算机(Linux)上运行此脚本,我无权安装模块或添加到路径变量。
我正在考虑使用语法导入,但看起来它正在寻找两个模块中任何一个都不存在的.py文件。
我收到错误: '没有名为pymssql的模块' 从pymssql导入pymssql'或者来自pymssql import *'。 (pymssql是一个包含pymssql源zip文件的目录)。
编辑: 该脚本将在多个主机上运行,因此我试图避免任何类型的安装。
答案 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
安装依赖项没有任何问题,但我希望不容易分发。