我有这样的文件夹结构:
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资源管理器)
其他回答
您可以使用importlib导入模块,其中您希望使用如下字符串从文件夹中导入模块:
import importlib
scriptName = 'Snake'
script = importlib.import_module('Scripts\\.%s' % scriptName)
这个示例有一个main.py,它是上面的代码,然后是一个名为Scripts的文件夹,然后您可以通过更改scriptName变量从这个文件夹中调用所需的任何内容。然后可以使用脚本引用此模块。例如,如果我在Snake模块中有一个名为Hello()的函数,您可以通过这样做来运行该函数:
script.Hello()
我已经在Python 3.6中测试过了
据我所知,直接在要导入的函数的文件夹中添加__init__.py文件即可完成此任务。
这里的答案不够清晰,这是在Python 3.6上测试的
使用此文件夹结构:
main.py
|
---- myfolder/myfile.py
其中myfile.py包含内容:
def myfunc():
print('hello')
main.py中的import语句是:
from myfolder.myfile import myfunc
myfunc()
这将打印hello。
将application作为python项目的根目录,在application、app和文件夹文件夹中创建一个空__init__.py文件。然后在some_file.py中进行如下更改以获得func_name的定义:
import sys
sys.path.insert(0, r'/from/root/directory/application')
from application.app.folder.file import func_name ## You can also use '*' wildcard to import all the functions in file.py file.
func_name()
name-file.py中的第一个导入系统
import sys
第二次在name-file.py中追加文件夹路径
sys.path.insert(0, '/the/folder/path/name-package/')
第三,在子目录中创建一个名为__init__.py的空白文件(这告诉Python它是一个包)
name-file.py名称包__初始化__.py名称模块.py
第四步导入name-file.py文件夹中的模块
from name-package import name-module