我有一个具有以下结构的 python 3 包:
\n\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 bin\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main_module\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 lib\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 module1.py\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 module2.py\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 module3.py\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test1.py\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test2.py\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test3.py\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 setup.py\nRun Code Online (Sandbox Code Playgroud)\n\n通常,只要跑一跑$ python3 setup.py install就万事大吉了。但是,我想在集群服务器上使用这个包,但我没有写入权限/usr/lib/. 我想到了以下解决方案。
以某种方式将包本地安装在我的用户文件夹中。
修改该包,使其无需安装即可运行。
请 IT 人员帮我安装该软件包。
我想避免 3.,所以我的问题是 1. 是否可能,如果不可能,我必须如何修改代码(特别是导入)以便能够在不安装的情况下使用该包。我整个早上都在阅读有关 python 中的相对导入的内容,现在我比以前更困惑了。我添加__init__.py到包和垃圾箱中,从我读到的内容来看,我认为它必须是这样from package.lib import module1,但我总是得到ImportError: No module named lib。
为了让 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'))
Run Code Online (Sandbox Code Playgroud)
os.path.expanduser("~")将为您提供主目录的路径,您可以使用它与包的路径连接os.path.join,然后将最终路径附加到sys.path.
如果package在主目录中,您只需在要使用此包的 python 代码的开头添加以下内容:
syspath.append(ospath.join(ospath.expanduser("~"), 'package'))
Run Code Online (Sandbox Code Playgroud)
还要确保您__init__.py的所有模块中都有一个。
| 归档时间: |
|
| 查看次数: |
14566 次 |
| 最近记录: |