导入python文件

导入python文件,python,python-2.7,python-import,Python,Python 2.7,Python Import,可能重复: 你好,, 我希望导入一个python文件,该文件位于主文件根目录下的子目录中。e、 g import ../library/utils.py 当我把它放进我的代码并运行它时,我得到了一个编译错误 是否有一种方法可以包含主文件根目录下的文件,或者它必须位于根目录下的子目录中 谢谢您的帮助。您不导入文件,而是导入模块。相应地修改sys.path,并导入utils,例如 import sys sys.path.append('../library') import utils 您不导

可能重复:

你好,, 我希望导入一个python文件,该文件位于主文件根目录下的子目录中。e、 g

import ../library/utils.py
当我把它放进我的代码并运行它时,我得到了一个编译错误

是否有一种方法可以包含主文件根目录下的文件,或者它必须位于根目录下的子目录中


谢谢您的帮助。

您不导入文件,而是导入模块。相应地修改
sys.path
,并导入utils,例如

import sys
sys.path.append('../library')
import utils

您不导入文件,而是导入模块。相应地修改
sys.path
,并导入utils,例如

import sys
sys.path.append('../library')
import utils
这将修改包含要搜索文件的目录的sys.path变量。它还将确保即使您以以下方式运行它,它也能正确找到它:

$ python the_file.py
$ python ../the_file.py
$ python /somewhere/over/the_file.py
这将适用于正在开发、测试和培训的人员。安装的文件不需要这样的构造

这将修改包含要搜索文件的目录的sys.path变量。它还将确保即使您以以下方式运行它,它也能正确找到它:

$ python the_file.py
$ python ../the_file.py
$ python /somewhere/over/the_file.py

这将适用于正在开发、测试和培训的人员。安装的文件不需要这样的构造。

这可以工作,但不是以独立于位置的方式。为什么只导入模块。例如,我得到了一个名为credentials.py的文件,其中包含我在许多脚本中需要的DB凭据。所有脚本都使用导入凭据,然后访问credentials.py中定义的变量。这是坏习惯吗?有什么建议吗?@Hyperboreus-这么说吧-您导入的任何文件都是一个模块。关于实践,嗯。。我也这么做:)@Hyperboreus:我的意思是,虽然模块可以从文件中加载,但导入机制比这更灵活(这就是为什么您将模块名与
import
一起使用,而不是文件名)。@Hyperboreus:这与您应该做什么无关(这是另一个主题),但是在python中,import语句导入一个模块,该模块与包含文件的C语言相反。如果您有一些credentials.py文件,python唯一允许的就是导入credentials模块(知道它是否由credentials.py文件实现是不相关的)。这会起作用,但不会以独立于位置的方式进行。为什么只导入模块。例如,我得到了一个名为credentials.py的文件,其中包含我在许多脚本中需要的DB凭据。所有脚本都使用导入凭据,然后访问credentials.py中定义的变量。这是坏习惯吗?有什么建议吗?@Hyperboreus-这么说吧-您导入的任何文件都是一个模块。关于实践,嗯。。我也这么做:)@Hyperboreus:我的意思是,虽然模块可以从文件中加载,但导入机制比这更灵活(这就是为什么您将模块名与
import
一起使用,而不是文件名)。@Hyperboreus:这与您应该做什么无关(这是另一个主题),但是在python中,import语句导入一个模块,该模块与包含文件的C语言相反。如果您有一些credentials.py文件,python唯一允许的就是导入credentials模块(知道它是否由credentials.py文件实现是不相关的)。这比Cat的回答稍不正确,因为它尝试计算要添加到sys.path的正确绝对路径,而不是假设进程工作目录与Python包的基础相同。但是,它仍然是不正确的,因为
\uuuuu文件\uuuuu
可能无法反映源代码的实际安装位置(字节码通常构建在临时构建目录中,然后重新定位到安装目录)。对于鸡蛋和zip文件,它也失败了。哇,你的100%解决方案一定很酷!只需使用一个包含一些zc.recipe.egg的构建来准备正确的路径:-)。。。这可能有点过头了。这比Cat的答案稍微不太正确,因为它尝试计算要添加到sys.path的正确绝对路径,而不是假设进程工作目录与Python包的基础相同。但是,它仍然是不正确的,因为
\uuuuu文件\uuuuu
可能无法反映源代码的实际安装位置(字节码通常构建在临时构建目录中,然后重新定位到安装目录)。对于鸡蛋和zip文件,它也失败了。哇,你的100%解决方案一定很酷!只需使用一个包含一些zc.recipe.egg的构建来准备正确的路径:-)。。。可能有点过分了。