为什么我的脚本目录不在Python sys.path中?

时间:2018-07-18 13:21:16

标签: python python-3.x import python-import

Python 3.6.5
我知道这一点:Why does my python not add current working directory to the path? 但是问题在于他正在做一些更复杂的事情(指的是子文件夹,但要在主文件夹中执行)。答案是简化操作或添加程序包定义。

选定的答案甚至说:“添加的是脚本目录”

但是,我的问题确实更简单:我的脚本目录未添加。

基本上,互联网上的所有教程都说:import mymodule
当我这样做时,我得到一个名称错误...

我的文件夹结构:

C:/Projects/interner
    interner.py   # this is the main program body
    aux.py        # this is the auxiliary file I would like to import into the above

我尝试过在interner.py中编码“ import aux”,也尝试使用交互式控制台:

cd c:/Projects/interner
python
import aux

无济于事(ModuleNotFoundError:没有名为“ aux”的模块)

我的系统路径:

['C:\\Tools\\Python\\python365\\python36.zip', 'C:\\Tools\\Python\\python365']

(从脚本内部和交互式控制台均可)

您能告诉我为什么我不能导入本地脚本吗?是因为我的sys.path缺少PWD吗?如果是这样,为什么会丢失它?

编辑:这样做有助于调查:

>>> import os; print(os.listdir("."))
['aux.py', 'hw.py', 'interner.py', 'my_funcs.py']

4 个答案:

答案 0 :(得分:1)

我不知道为什么,但是您的""变量中似乎缺少sys.path,并且可以阻止从当前目录导入模块!

我可以以某种方式重现您的问题(eatcpu.py在当前目录中)

$ python.exe
Python 2.7.8 (default, Jun 30 2014, 16:08:48) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', 'C:\\Windows\\system32\\python27.zip', 'D:\\AppX64\\Python27\\DLLs', ... etc...]
>>> import eatcpu

有效。现在在另一个python会话中:

$ python.exe
Python 2.7.8 (default, Jun 30 2014, 16:08:48) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.remove("")
>>> import eatcpu
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named eatcpu
>>>

为您准备的快速修复程序是

import sys
sys.path.append("")

答案 1 :(得分:0)

我相信这是一个Python错误,特定于可嵌入的(没有安装程序的ZIP文件)Windows发行版。我已提交https://bugs.python.org/issue34841

从发行版中删除python37._pth文件(在您的情况下大概为python36._pth)对我来说是固定的。

答案 2 :(得分:0)

您似乎正在使用CPython的可嵌入式发行版,而不是常规安装程序之一。如the documentation page所述:

嵌入式发行版是一个包含最小Python环境的ZIP文件。它旨在用作另一个应用程序的一部分,而不是由最终用户直接访问。

由于您似乎是直接访问Python而不是将其嵌入,因此您应该考虑使用常规(或Microsoft Store)安装程序(也在我上面链接的页面中进行了介绍)。

答案 3 :(得分:-1)

尝试使其明确:

from . import aux