当我试图从一个目录导入一个文件时,我似乎不知道如何修复下面的错误,这让我发疯。Python 3.6.7。
下面是The Internet
所说的应该怎么做,一个目录:
from .. import app
下面是错误:
Traceback (most recent call last):
File "module1.py", line 16, in <module>
from .. import app
ValueError: attempted relative import beyond top-level package
下面是目录结构(需要注意的是,我是在package1
内部调用脚本module1.py
):
--- project/
--- __init__.py
--- app.py
--- package1/
--- __init__.py
--- module1.py
以下是我试图解决的问题:
方法1 (相同错误)
import sys
HERE = Path(__file__).parent
sys.path.append(str(HERE / '../'))
from .. import app
方法2 (found here,相同的错误)
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__)))
from .. import app
方法3 (也是found here,同样的错误)
import sys
sys.path.append('.')
from .. import app
发布于 2019-04-25 01:05:55
我在我的笔记本电脑上实现了这个功能,所以我希望它也能在你的电脑上运行。
模块1.py
import sys
from os import path
sys.path.append(path.join(path.dirname(__file__), '..'))
from app import print_app
print_app()
app.py:
def print_app():
print('success')
return None
结果:
$python module1.py
'success'
发布于 2019-04-25 03:33:03
Python的标准包结构如下所示:
c:\srv\tmp> tree project
project
|-- project
| |-- __init__.py
| |-- app.py
| `-- package1
| |-- __init__.py
| `-- module1.py
`-- setup.py
其中,项目根c:\srv\tmp\project
包含一个setup.py
文件和一个子目录,该子目录也称为project
,其中包含源代码。
module1.py
的内容
from .. import app
def module1_fn():
print("In module1, have imported app as:", app)
和setup.py
的内容
from setuptools import setup
setup(
name='project',
packages=['project'], # where to find sources
entry_points={
'console_scripts': """
module1-fn = project.package1.module1:module1_fn
"""
}
)
现在是“神奇”部分,从包含setup.py
的目录中运行(注意末尾的.
):
c:\srv\tmp\project> pip install -e .
Obtaining file:///C:/srv/tmp/project
Installing collected packages: project
Running setup.py develop for project
Successfully installed project
现在,您可以从任何目录运行以下命令:
c:\srv\tmp\project> module1-fn
In module1, have imported app as: <module 'project.app' from 'c:\srv\tmp\project\project\app.pyc'>
即。module1-fn
可以直接从外壳(!)调用,from .. import app
直接工作(!!)
https://stackoverflow.com/questions/55834762
复制相似问题