Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';似乎无法使用_uinit__uuu.py导入模块_Python_Python 2.7_Import - Fatal编程技术网

Python Can';似乎无法使用_uinit__uuu.py导入模块

Python Can';似乎无法使用_uinit__uuu.py导入模块,python,python-2.7,import,Python,Python 2.7,Import,当有人回答这个问题时,我会觉得自己是个十足的白痴,因为我知道我以前也做过 使用Python 2.7.5 我有以下文件结构: sandbox/ |-- fun | |-- __init__.py | `-- spock.py |-- __init__.py `-- something |-- blah.py `-- __init__.py 请注意,在每个级别上都有一个\uuuu init\uuuuu.py文件。每个\uuuu init\uuuu.py都是空的 spock.

当有人回答这个问题时,我会觉得自己是个十足的白痴,因为我知道我以前也做过

使用Python 2.7.5

我有以下文件结构:

sandbox/
|-- fun
|   |-- __init__.py
|   `-- spock.py
|-- __init__.py
`-- something
    |-- blah.py
    `-- __init__.py
请注意,在每个级别上都有一个
\uuuu init\uuuuu.py
文件。每个
\uuuu init\uuuu.py
都是空的

spock.py
blah.py
非常简单

spock.py

def helpmespock():
    print "help me spock!"
胡说八道

import fun.spock

fun.spock.helpmespock()
从sandbox和从sandbox/something执行blah会导致相同的错误:

[me@computer sandbox]$ python something/blah.py 
Traceback (most recent call last):
  File "something/blah.py", line 1, in <module>
    import fun.spock
ImportError: No module named fun.spock
现在这棵树看起来像这样:

sandbox/
|-- fun
|   |-- __init__.py
|   `-- spock.py
|-- something
|   |-- blah.py
|   `-- __init__.py
`-- test.py
执行
test.py
会给出:

[sri@s6000-devel sandbox]$ python test.py
help me spock!

尝试绝对意义上的导入

import sandbox.fun.spock

您需要添加sys.path

import os, sys                                                                  

sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir))
import fun.spock                                                                

fun.spock.helpmespock() 
尝试将“.”添加到您的路径:

import sys
sys.path.append("..")
from fun import spock

print spock.helpmespock() 

问题是,您直接运行blah.py,导入无法将
sandbox.fun.spock
fun.spock
作为父级解析,因为
\uu name\uuuuuu
的计算结果为
“\uu main\uuuuu”

因此,
\uu name\uuu
应该是
“sandbox.something.blah”
并且
sandbox
必须在路径中:

  • 正确导入沙盒/something/blah.py:

    from ..fun import spock
    
    spock.helpmespock()
    
    甚至更好

    from ..fun import spock
    
    def do():
        spock.helpmespock()
    
  • 创建一个用于测试blah的main(sandox/./test.py):


  • 我不知道这是否与其他人有关;但是我遇到了这个问题,因为我的系统(MacOSX10.15.6)使用Conda4.8.3,bashrc没有正确初始化,并且持续默认为系统python

    # Open terminal:
    python --version  # Python 3.7.7
    which python  # $HOME/anaconda3/envs/env_name/bin/python
    

    结果,我的python接口使用了错误的python版本(2.7而不是3.7)。如果有帮助,请在运行代码之前立即检查版本;在我的例子中,版本是在开发过程中部分切换的。

    Traceback(最后一次调用):import sandbox.fun.spock ImportError中第1行的文件“some/blah.py”:没有名为sandbox.fun.spock的模块。您的模块在python路径中吗?尝试将自己定位到沙盒的父目录中,然后运行代码。这也不起作用。{[sri@s6000-devel~]$python sandbox/something/blah.py Traceback(最后一次调用):文件“sandbox/something/blah.py”,第1行,在import sandbox.fun.spock importorror中:没有名为sandbox.fun.spock}的模块听起来我并不疯狂。我所做的应该有用,不[sri@s6000-devel something]$python blah.py文件“blah.py”,第1行import..fun.spock^SyntaxError:无效的syntaxes仍然没有乐趣。(Python 2.7.5)[sri@s6000-devel something]$python blah.py文件“blah.py”,第1行来自。。import fun.spock^SyntaxError:无效语法没有init.PYC文件这一事实提供了线索?这也可以,但我不应该直接操纵搜索路径。init.py文件应该使模块可用。对吗?你是对的,也许这对我们有用:something/blah.py的python路径执行是sandbox/something。py不知道如何获得乐趣,因为它是一个显式执行。如果在沙盒目录中创建一个新文件(test.py)时只导入something.blah,则情况会有所不同。执行这个文件的路径是sandbox(有趣的和一些已知的东西)(对不起我的英语不好)你可以用sys.path知道路径你的英语很好。我知道我以前没有操纵sys.path就这样做过。您是正确的,正在从sandbox works导入fun.spock。有关信息,请访问
    import sandbox.something.blah
    
    sandbox.something.blah.do()
    
    # Open terminal:
    python --version  # Python 3.7.7
    which python  # $HOME/anaconda3/envs/env_name/bin/python
    
    source $HOME/.bashrc
    python --version  # Python 2.7.16
    which python  # /usr/local/bin/python