我有这样的文件夹结构:
application
├── app
│ └── folder
│ └── file.py
└── app2
└── some_folder
└── some_file.py
如何从file.py或some_file.py中导入函数?我尝试了:
from application.app.folder.file import func_name
但它不起作用。
我有这样的文件夹结构:
application
├── app
│ └── folder
│ └── file.py
└── app2
└── some_folder
└── some_file.py
如何从file.py或some_file.py中导入函数?我尝试了:
from application.app.folder.file import func_name
但它不起作用。
当前回答
我很特别:我在Windows中使用Python!
我只完成了信息:对于Windows和Linux,相对路径和绝对路径都可以在sys.path中工作(我需要相对路径,因为我在几台电脑上和不同的主目录下使用脚本)。
当使用Windows时,\和/都可以用作文件名的分隔符,当然,您必须将\加倍为Python字符串,一些有效的例子:
sys.path.append('c:\\tools\\mydir')
sys.path.append('..\\mytools')
sys.path.append('c:/tools/mydir')
sys.path.append('../mytools')
(注意:我认为/比\更方便,如果它不是“Windows本机”,因为它与Linux兼容,并且更容易写入和复制到Windows资源管理器)
其他回答
这对我在窗户上有用
# some_file.py on mainApp/app2
import sys
sys.path.insert(0, sys.path[0]+'\\app2')
import some_file
您的问题是Python正在Python目录中查找此文件,但没有找到它。您必须指定您所指的是您所在的目录,而不是Python目录。
要执行此操作,请更改此项:
从application.app.folder.file导入func_name
为此:
from .application.app.folder.file import func_name
通过添加点,您可以在这个文件夹中查找应用程序文件夹,而不是在Python目录中查找。
注:这个答案是针对一个非常具体的问题。对于大多数来自搜索引擎的程序员来说,这不是你想要的答案。通常,您会将文件结构化为包(参见其他答案),而不是修改搜索路径。
默认情况下,您不能。当导入文件时,Python只搜索入口点脚本运行的目录和sys.path,其中包括包安装目录等位置(实际上比这复杂一点,但这涵盖了大多数情况)。
但是,您可以在运行时向Python路径添加:
# some_file.py
import sys
# caution: path[0] is reserved for script path (or '' in REPL)
sys.path.insert(1, '/path/to/application/app/folder')
import file
只需使用os模块中的change-dir函数:
os.chdir("Here new director")
比正常情况下可以导入的更多信息
这个问题可能是因为Pycharm
我在使用Pycharm时遇到了同样的问题。我有这个项目结构
skylake\
backend\
apps\
example.py
configuration\
settings.py
frontend\
...some_stuff
和example.py中配置导入设置的代码引发导入错误
问题是,当我打开Pycharm时,它认为skylake是根路径,并运行了这段代码
sys.path.extend(['D:\\projects\\skylake', 'D:/projects/skylake'])
为了解决这个问题,我只将后端目录标记为源根目录
它解决了我的问题