【发布时间】:2017-11-30 15:22:37
【问题描述】:
所以,我正在尝试打包我编写的 python 脚本,它有一个子模块,我们称之为submodule。文件夹结构如下所示:
cool_script/
setup.py
cool_script.py
submodule/
__init__.py
implementation.py
现在,经过多次pip install . 和pip install -e . 调用,我遇到了可以全局导入submodule 的情况。无论在我的系统上的哪个位置,这将始终有效:
$ python3
[...]
>>> import submodule
>>> submodule.__file__
'/home/me/fake/path/cool_script/submodule/__init__.py'
但我不知道为什么。
我做的包又被卸载了,pip在其索引中找不到子模块。 dist-packages 中也没有任何内容,我手动删除了仍然坐在那里的cool_script.egg-link:
$ ls /usr/local/lib/python3.4/dist-packages | ack cool
$ ls /usr/local/lib/python3.4/dist-packages | ack submodule
$
PYTHONPATH 也是空的:
$ echo $PYTHONPATH
$
为什么 Python 知道submodule 的位置?我怎样才能知道?
【问题讨论】:
-
它是否安装在 virtualenv 中?是linux系统吗?
-
这确实是一个linux系统,不,我在我的全局环境中做了这些实验。我知道那很愚蠢。我猜是吸取了教训。
-
这听起来可能很愚蠢,但是您尝试过重新启动吗?也许它只是缓存在某个地方
-
导入子模块时会发生什么?你有错误吗?
-
“我怎样才能找到答案?”我猜是
sys.path。当前的工作目录也在那里,所以你确定这不仅仅是你从cool_script文件夹本身做的import submodule吗?
标签: python python-3.x pip python-import