假设我有一个自定义模块:
/basexx_yy/subdir1/subdir2/subdir3/subdir4/custom_module.py
需要导入custom_module.py
的脚本位于:
/basexx_yy/subdir1/otherdir/script.py
basexx_yy
是一个带有动态名称的目录,请将xx
和yy
视为时间戳,但为了清楚起见,xx
是一周(01 =星期一 - 05 =星期五),yy
是星期数(subdir1
- subdir4
是常数)。因此custom_module.py
的完整路径不能作为静态地址包含在内。由于子目录是常量,我编写了以下代码:
import os
import sys
cwd = os.getcwd()
split = cwd.split('\\')
if 'subdir1' in split:
parentdir = cwd.split('subdir1')
sys.path.insert(0, os.path.join(parentdir[0], 'subdir1', 'subdir2', 'subdir3', 'subdir4'))
else:
sys.exit("'subdir' dir not found! Run the script from within basedir.")
import custom_module
然而,它不起作用。我很欣赏一些清晰度,因为我无法理解为什么这不起作用。
答案 0 :(得分:2)
从你的问题来看,你的情况并不完全清楚,但是这里的设计用于:
setup.py
,可以使用pip
进行安装。__init__.py
。您的包应该具有类似
的结构setup.py
basexx_yy/
__init__.py
something_else.py
subdir1/
__init__.py
more_files.py
otherdir/
script.py
subdir2/
__init__.py
etc.py
subdir3/
__init__.py
pp.py
subdir4/
__init__.py
custom_module.py
basexx_yy
是一个包意味着它可以使用
pip install basexx_yy
或者,在开发时
pip install -e basexx_yy
之后任何脚本(甚至可能完全在你的包裹之外)都可以
import basexx_yy
并且深入导入如
import basexx_yy.subdir1.subdir2.subdir3.subdir4.custom_module as cm
cm.sqrt(4)
或者,模块树中的任何文件(otherdir
缺少__init__.py
,因此它在模块树之外,不能执行此操作)可以执行相对导入。
e.g。 custom_module.py
可以
from . import custom_modules
from .. import pp
from ... import etc
from .... import more_files
from ..... import something_else
答案 1 :(得分:0)
我同意Nils Werner的意见,你很可能想重组你的包裹。
无论如何,你的代码应该可行!唯一的问题是你使用
var myApp = angular.module('myApp', []);
myApp.controller('appCtrl', function($scope) {
$scope.var = {
test: true
}
})
而不是
split = cwd.split('\\')