我有以下目录:
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程序:
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 模块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 这样的神秘未导入)
运行 …
我正在尝试在 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.pypackage/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'
那么,我需要什么胶水来设置这个结构?
我有一个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#import,http://python.readthedocs.org/en/latest/reference/import.html,如何在同一目录或子目录中导入类?,Python 3中的相对导入和Python 3中的相对导入不起作用。
我怀疑它可能与virtualenv有关,但是a)我不明白为什么工作目录不会成为PYTHONPATH的一部分,并且b)我不太确定如何在virtualenv中进行更改-Intellij设置了它为我。