如何使用打包的python包而不安装它

时间:2018-02-12 12:26:57

标签: python python-3.x

我有一个python 3包,其结构如下:

.
├── package
│   └── bin
        └── main_module
│   └── lib
│       ├── __init__.py
│       ├── module1.py
│       ├── module2.py
│       └── module3.py
│   └── test
│       ├── test1.py
│       ├── test2.py
│       └── test3.py
│   └── setup.py

通常,一个人运行$ python3 setup.py install,一切都很好。但是,我想在群集服务器上使用此程序包,我对/usr/lib/没有写入权限。我想到了以下解决方案。

  1. 以某种方式在我的用户文件夹中本地安装软件包。

  2. 修改包,使其无需安装即可运行。

  3. 请IT人员为我安装包。

  4. 我想避免3.,所以我的问题是1.是否可能,如果没有,我如何修改代码(特别是导入)以便能够在不安装的情况下使用该包。我整个早上一直在阅读python中的相关进口,现在我比以前更加困惑了。我将__init__.py添加到打包和bin中,根据我的读取,我认为它必须是from package.lib import module1,但我总是得到ImportError: No module named lib

3 个答案:

答案 0 :(得分:2)

为了让Python能够找到您的模块,您需要将包的路径添加到sys.path列表中。作为一般方法,您可以使用以下代码段:

from sys import path as syspath
from os import path as ospath

syspath.append(ospath.join(ospath.expanduser("~"), 'package_path_from_home'))

os.path.expanduser("~")将为您提供主目录的路径,您可以使用os.path.join将其与包的路径相关联,然后将最终路径追加到sys.path

如果package位于主目录中,您只需在应该使用此包的python代码的前导处添加以下内容:

syspath.append(ospath.join(ospath.expanduser("~"), 'package'))

还要确保所有模块中都有__init__.py

答案 1 :(得分:1)

我有同样的问题。我用第一种方法

  • 通过运行将软件包本地安装在我的用户文件夹中

    python setup.py install --user

这会将您的模块安装到〜/ .local / lib / python3 /

答案 2 :(得分:0)

只需将“包”的路径添加到环境变量PYTHONPATH即可。这将摆脱你得到的错误。 要么 以编程方式将包的路径添加到sys.path.append()