Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中通过一个符号链接导入多个文件?_Python_Python 2.7_Import_Environment Variables_Pythonpath - Fatal编程技术网

如何在python中通过一个符号链接导入多个文件?

如何在python中通过一个符号链接导入多个文件?,python,python-2.7,import,environment-variables,pythonpath,Python,Python 2.7,Import,Environment Variables,Pythonpath,我有一个scriptscript.py和不同目录中的多个模块,它们都相互依赖。为了简单起见,我们只看其中的两个,module1.py和module2.py,其中前者导入后者。所有这些都应该由script.py使用 现在,我将module1.py的符号链接添加到script.py目录中,因此我的目录树如下所示: . ├── mymodules │   ├── module1.py │   └── module2.py └── myscript ├── module1.py -> ..

我有一个script
script.py
和不同目录中的多个模块,它们都相互依赖。为了简单起见,我们只看其中的两个,
module1.py
module2.py
,其中前者导入后者。所有这些都应该由
script.py
使用

现在,我将
module1.py
的符号链接添加到
script.py
目录中,因此我的目录树如下所示:

.
├── mymodules
│   ├── module1.py
│   └── module2.py
└── myscript
    ├── module1.py -> ../mymodules/module1.py
    └── script.py
现在只运行
script.py
不起作用,因为
PYTHONPATH
不包含
mymodules
目录,因此
module1
无法导入
module2
。现在,有一个简单的解决方法;将
module1.py的路径追加到
PYTHONPATH

sys.path.append(os.path.abspath(os.path.join(os.path.realpath(__file__),os.path.pardir))) 
这就是问题出现的地方:这是可行的,但只有一次

第一次运行运行正常,导入所有模块时没有任何问题

但是每次后续执行
$./script.py
都会失败,异常情况是
导入错误:没有名为module2
sys.path
的模块包含符号链接的目录,而不是文件!为什么?我该如何解决这个问题



所有代码: 我想如果你想亲自尝试的话,你可能需要这个

myscript/script.py: mymodules/module1.py mymodules/module2.py
简单地说,
append
将真实的目录名添加到
sys.path

sys.path.append(os.path.dirname(os.path.realpath(__file__)))
这个输出是

import successful
但是,在将符号
module1.py
编译为
module1.pyc
后,
modeul1.pyc
将位于
myscript
。上述代码不起作用

解决方案 所以,解决方案是将
mymodules/module1.py
修改为

import os
import sys

srcfile = __file__
if srcfile.endswith('.pyc'):
    srcfile = srcfile[:-1] # pyc to py
sys.path.append(os.path.dirname(os.path.realpath(srcfile)))

import module2

在模块内更改
sys.path
非常关键。如果真的需要,只在脚本中设置它。py@Daniel你能详细谈谈吗?我认为python的全部意义在于,您可以随时更改任何内容。为什么不是
PYTHONPATH
?我的意思是这真的只是一个包含路径。非常感谢。我完全忘记了
.pyc
文件,您的解决方案非常通用。谢谢
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
import successful
import os
import sys

srcfile = __file__
if srcfile.endswith('.pyc'):
    srcfile = srcfile[:-1] # pyc to py
sys.path.append(os.path.dirname(os.path.realpath(srcfile)))

import module2