java导⼊模块⽅式_从相对路径导⼊模块-javail的个⼈空间-
OSCHINA-中⽂开源。。。
如何根据相对路径导⼊Python模块?
例如,如果dirFoo包含Foo.py和dirBar ,并且dirBar包含Bar.py ,如何将Bar.py导⼊Foo.py ?
这是⼀个直观的表⽰:
dirFoo\
Foo.py
dirBar\
Bar.py
Foo希望包含Bar ,但重组⽂件夹层次结构不是⼀种选择。
#1楼
Linux⽤户的快捷⽅式
如果您只是在修补并且不关⼼部署问题,则可以使⽤符号链接(假设您的⽂件系统⽀持它)使模块或包直接在请求模块的⽂件夹中可见。
ln -s (path)/module_name.py
要么
ln -s (path)/package_name
注意:“模块”是任何扩展名为.py的⽂件,“package”是包含⽂件__init__.py (可以是空⽂件)的任何⽂件夹。 从使⽤的⾓度来看,模块和包是相同的 - 都通过import命令公开它们包含的“定义和语句”。
#2楼
不对脚本进⾏任何修改的最简单⽅法是设置PYTHONPATH环境变量。 因为sys.path是从这些位置初始化的:
包含输⼊脚本(或当前⽬录)的⽬录。
PYTHONPATH(⽬录名列表,语法与shell变量PATH相同)。
依赖于安装的默认值。
赶紧跑:
export PYTHONPATH=/absolute/path/to/your/module
您的sys.path将包含上⾯的路径,如下所⽰:
print sys.path
['', '/absolute/path/to/your/module', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10',
'/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packa
ges/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/ubuntuone-client', '/usr/lib/python2.7/dist-packages/ubuntuone-control-panel',
'/usr/lib/python2.7/dist-packages/ubuntuone-couch', '/usr/lib/python2.7/dist-packages/ubuntuone-installer',
'/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']
#3楼
添加__init__.py⽂件:
dirFoo\
Foo.py
dirBar\
__init__.py
Bar.py
然后将此代码添加到Foo.py的开头:
import sys
sys.path.append('dirBar')
import Bar
#4楼
相对sys.path⽰例:
# /lib/my_module.py
# /src/test.py
if __name__ == '__main__' and __package__ is None:
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../lib')))
import my_module
基于这个答案。
#5楼
对于这种情况,将Bar.py导⼊Foo.py,⾸先我将这些⽂件夹转换为Python包,如下所⽰:dirFoo\
__init__.py
Foo.py
dirBar\
__init__.py
Bar.py
然后我会在Foo.py中这样做:
from .dirBar import Bar
如果我希望命名空间看起来像Bar。 ⽆论如何 ,或
from . import dirBar
如果我想要命名空间dirBar.Bar。 ⽆论如何 如果dirBar包下有更多模块,则第⼆种情况很有⽤。
>python转java代码
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论