相关疑难解决方法(0)

SystemError:父模块''未加载,无法执行相对导入

我有以下目录:

myProgram
??? app
    ??? __init__.py
    ??? main.py 
    ??? mymodule.py
Run Code Online (Sandbox Code Playgroud)

mymodule.py:

class myclass(object):

def __init__(self):
    pass

def myfunc(self):
    print("Hello!")
Run Code Online (Sandbox Code Playgroud)

main.py:

from .mymodule import myclass

print("Test")
testclass = myclass()
testclass.myfunc()
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,我得到了这个错误:

Traceback (most recent call last):
  File "D:/Users/Myname/Documents/PycharmProjects/myProgram/app/main.py", line 1, in <module>
    from .mymodule import myclass
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)

这有效:

from mymodule import myclass
Run Code Online (Sandbox Code Playgroud)

但是当我输入时,我没有自动完成,并且有一条消息:"未解析的引用:mymodule"和"未解析的引用:myclass".在我正在处理的其他项目中,我收到错误:"ImportError:没有名为'mymodule'的模块.

我能做什么?

python python-3.x

93
推荐指数
3
解决办法
11万
查看次数

Python:模块和打包 - 为什么在__main__.py之前没有执行__init__.py文件?

我有一个完全包含在具有以下结构的目录中的python程序:

myprog/
??? __init__.py
??? __main__.py
??? moduleone.py
??? moduletwo.py
Run Code Online (Sandbox Code Playgroud)

我希望能够打包并分发它,以便其他开发人员可以做pip install -e /path/to/git/clone/of/myprog,然后可以在他自己的程序中导入myprog并用它做很酷的事情.

我还希望能够在命令行运行myprog,如下所示:

PROMPT> python myprog
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我希望python能够执行__main__.py它所执行的模块.但是,此模块引用了一些声明的函数,这些函数__init__.py在程序在命令行运行时以及由另一个程序导入时都需要可用.但是,我收到以下错误:

NameError: name 'function_you_referenced_from_init_file' is not defined
Run Code Online (Sandbox Code Playgroud)

我必须以__main__.py某种方式导入这些功能吗?

我尝试了一个简单的例子如下:

PROMPT> cat myprog/__init__.py
def init_myprog():
    print 'running __init__.init_myprog()'

PROMPT> cat myprog/__main__.py
import myprog
print 'hi from __main__.py'
myprog.init_myprog()

PROMPT> ls -l myprog
total 16
-rw-r--r--  1 iit    63B Aug 30 11:40 __init__.py
-rw-r--r--  1 iit    64B Aug 30 12:11 __main__.py

PROMPT> python myprog
Traceback (most …
Run Code Online (Sandbox Code Playgroud)

python module python-module

11
推荐指数
2
解决办法
6843
查看次数

Python3导入相对或绝对的正确方法?

我正在编写一个 python 模块neuralnet。它在 Python2 中一切正常,但在 Python3 中导入失败。

这是我的代码结构。

neuralnet/
    __init__.py
    train.py         # A wrapper to train (does not define new things)
    neuralnet.py     # Defines the workhorse class neuralnet
    layer/
        __init__.py
        inlayer.py       # Defines input layer class
        hiddenlayer.py

application/         # A seperate application (not part of the package)
   classify.py       # Imports the neuralnet class from neuralnet.py
Run Code Online (Sandbox Code Playgroud)

train.py需要导入neuralnet.py 的neuralnet类。

neuralnet.py需要导入layers/inlayer.py

(我更喜欢相对进口。)

我有一个不同的应用程序 ( classify.py) 需要导入这个模块。我在哪里...

from neuralnet.neuralnet import neuralnet
Run Code Online (Sandbox Code Playgroud)

我尝试了几种导入方式。要么我得到一个错误(主要是像 parent 这样的神秘未导入)

  1. 运行 …

python import package python-2.7 python-3.x

7
推荐指数
1
解决办法
1万
查看次数

在 Python 中创建包含多个子包的包

我正在尝试在 Python 中创建一个包,它有许多需要互操作的子包(我不确定这对它们来说是否正确)。

我有一个这样的(简化的)结构:

/package
    |-script1.py
    |-script2.py
    |-subpackage1
    |   |-__init__.py
    |   |-src
    |   |   |-__init__.py
    |   |   |-my_program.py
    |   |   |-functions.py
    |   |   |-...
    |
    |-tests
    |    |-a_tests.py
    |-subpackage2
    |    |-web-server.py
    |    |-API
    |    |    |-__init__.py
    |    |    |-REST.py
    |    |    |-...
Run Code Online (Sandbox Code Playgroud)
  • package/subpackage2 需要能够调用 package/subpackage1/src/functions.py
  • package/tests调用两个子包(使用pytests)。
  • package/subpackage1/src/functions.py 需要能够调用内部的其他模块 subpackage1

我已经看到了这个答案:https : //stackoverflow.com/a/33195094 - 它解释了我需要做什么(创建一个包),但它没有解释如何去做。

我可以很容易地让两者scripts使用以下方法调用它们的组件子包:

import subpackage1.src.my_program.py

(即类似于此处的建议)但随后my_program.py失败并显示ImportError: No module named 'functions'

那么,我需要什么胶水来设置这个结构?

python import module package python-3.x

5
推荐指数
1
解决办法
7241
查看次数

Intellij Idea无法识别python 3中本地类的导入

我有一个python3脚本script.py,在其中我要实例化一个在clazz.py中定义的Foobar类。但是,当我尝试导入时,我得到:

$ python3 script.py
...
SystemError: Parent module '' not loaded, cannot perform relative import
Run Code Online (Sandbox Code Playgroud)

这是我的文件结构:

python_import/
??? __init__.py
??? clazz.py
??? script.py
Run Code Online (Sandbox Code Playgroud)

clazz.py:

class Foobar():
    def __init__(self):
        print("initialized a foobar")
Run Code Online (Sandbox Code Playgroud)

script.py:

from .clazz import Foobar
foobar = Foobar()
Run Code Online (Sandbox Code Playgroud)

它运行很好,如果我摆脱.import; 但是,如果执行此操作,则我的IDE(Intellij IDEA)会以红色下划线标记导入内容,并且不会自动完成任何操作。我相信.在python3中包含正确,并且Intellij似乎很喜欢,所以除非删除它,否则为什么我的程序无法运行?

我已阅读http://www.diveintopython3.net/porting-code-to-python-3-with-2to3.html#importhttp://python.readthedocs.org/en/latest/reference/import.html如何在同一目录或子目录中导入类?Python 3中的相对导入Python 3中的相对导入不起作用

我怀疑它可能与virtualenv有关,但是a)我不明白为什么工作目录不会成为PYTHONPATH的一部分,并且b)我不太确定如何在virtualenv中进行更改-Intellij设置了它为我。

python import intellij-idea python-3.x

4
推荐指数
1
解决办法
2961
查看次数