我有一个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/
没有写入权限。我想到了以下解决方案。
以某种方式在我的用户文件夹中本地安装软件包。
修改包,使其无需安装即可运行。
请IT人员为我安装包。
我想避免3.,所以我的问题是1.是否可能,如果没有,我如何修改代码(特别是导入)以便能够在不安装的情况下使用该包。我整个早上一直在阅读python中的相关进口,现在我比以前更加困惑了。我将__init__.py
添加到打包和bin中,根据我的读取,我认为它必须是from package.lib import module1
,但我总是得到ImportError: No module named lib
。
答案 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()