首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python本地模块与此相同?

python本地模块与此相同?
EN

Stack Overflow用户
提问于 2018-09-20 04:40:50
回答 1查看 0关注 0票数 0

我有一个像下面这样的本地python代码repo。在python/foo/code.py我想要导入target_modulefoo/bar/baz/target_module。但是,因为code.py是在foo模块下,我无法导入target_module。由于它是一个带有大量遗留代码的大型仓库,我无法轻易更改任何目录名称。还有其他解决方法吗?

提前致谢!

代码语言:javascript
复制
|──foo
|   ├──bar
|         ├──baz
| ├──target_module
├──python
| ├──foo
| │├──code.py<----来自foo.bar.baz.target_module import *
EN

回答 1

Stack Overflow用户

发布于 2018-09-20 13:51:58

有几种方法可以做到这一点。快速而肮脏的是将它添加到解释器的路径中。

这是我的设置:

代码语言:javascript
复制
Matthews-MacBook-Pro:test_project matt$ tree
.
├── foo
│   └── bar
│       └── baz
│           └── target_module.py
└── python
    └── foo
        └── code.py

5 directories, 2 files

这是以下内容target_module.py

代码语言:javascript
复制
def my_func():
    print("my func called.")

以及如何将此功能导入code.py

代码语言:javascript
复制
import os
import sys

# Cheat and just add it to python interpreter's path                                                                                                                                                        
this_dir = os.path.dirname(__file__)
sys.path.append(os.path.join(this_dir, "..", "..", "foo", "bar", "baz"))

import target_module as tm
tm.my_func()

这个输出:

代码语言:javascript
复制
Matthews-MacBook-Pro:test_project matt$ python python/foo/code.py 
my func called.

或者你可以从foo目录中调用它,它仍然可以正常工作:

代码语言:javascript
复制
Matthews-MacBook-Pro:test_project matt$ cd python/foo/
Matthews-MacBook-Pro:foo matt$ python code.py 
my func called.

您也可以将foo/bar/baz目录添加到PYTHONPATH环境变量而不是调用sys.path.append。这种语法依赖于shell:所以我会让你谷歌如何为你的特定shell设置环境变量。

理想情况下,您希望使您的模块可以部署(即使用setup.py和/ distutilssetuptools放入__init__.py每个模块),然后您可以“正常”导入(有点像您可以“只是” import numpy并且它可以工作)。但既然你声称它的遗产,也许你可能很难完成。我明白了:在遗留系统中,所有的赌注都是关闭的,有时候快速和肮脏都很好(如果你不想花很多时间来解决这个问题,甚至可能是理想的)。

如果你对创建可部署的python包感兴趣,我可以扩展这个答案,如果没有,上面应该完成工作。

HTH。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档