【问题标题】:How to use a packed python package without installing it如何在不安装的情况下使用打包的 python 包
【发布时间】:2018-02-12 12:26:57
【问题描述】:

我有一个具有以下结构的 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 人员为我安装软件包。

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

【问题讨论】:

  • 你必须将你的包的路径添加到sys.path,这样Python才能找到你的模块。

标签: python python-3.x


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    只需将“包”的路径添加到环境变量PYTHONPATH。这将消除您遇到的错误。 或者 以编程方式将包的路径添加到sys.path.append()

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。我用的是第一种方法

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

        python setup.py install --user

      这会将你的模块安装到 ~/.local/lib/python3/

      【讨论】:

        【解决方案4】:

        您可以将其添加到包的“主文件”中

        import sys, os
        sys.path.append(os.path.dirname(__file__) + "/..")
        

        你可以通过寻找这个模式找到“主文件”

        if __name__ == "__main__":
            some_function()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-10-05
          • 2018-06-03
          • 1970-01-01
          • 2016-06-12
          • 2018-08-19
          • 2020-06-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多