导入模块的强制步骤是什么?

发布于 2024-09-18 13:14:22 字数 706 浏览 6 评论 0 原文

我是 python 新手,面临一个问题:

我尝试扩展我的 SConstruct 文件并导入位于项目子目录中的模块。

这是我的 SConstruct 文件:

import os, sys
sys.path.append(os.path.abspath(os.path.join('.', 'custom_dir')))
import mymodule

mymodule.foo()

这是 mymodule.py 文件,位于名为 custom_dir 的子目录中:

def foo():
  print 'foo'

我还有一个 __init__ .py 文件位于我的 custom_dir 目录中。

当我执行 scons 时:

  File ".\SConstruct", line 22, in <module>
    mymodule.foo()
AttributeError: 'module' object has no attribute 'foo'

如果我执行 python.exe SConstruct ,我会得到相同的结果。

我在这里做错了什么?

I'm new to python and I face an issue:

I try to extend my SConstruct file and to import a module located in a sub-directory of my project.

Here is my SConstruct file:

import os, sys
sys.path.append(os.path.abspath(os.path.join('.', 'custom_dir')))
import mymodule

mymodule.foo()

Here is the mymodule.py file, located into a subdirectory named custom_dir:

def foo():
  print 'foo'

I also have a __init__.py file in my custom_dir directory.

When I execute scons:

  File ".\SConstruct", line 22, in <module>
    mymodule.foo()
AttributeError: 'module' object has no attribute 'foo'

If I do python.exe SConstruct I got the same result.

What am I doing wrong here ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

半枫 2024-09-25 13:14:22

您应该确保导入正确的模块,而不是路径中其他位置具有相同名称的不同模块,

运行程序

尝试使用 python.exe -v SConstruct或

print mymodule 。 __file__ 就在 print mymodule.foo() 之前

You should make sure that you are importing the correct module and not a different one with the same name somewhere else in your path

try running your program with python.exe -v SConstruct

or

print mymodule.__file__ right before print mymodule.foo()

笑忘罢 2024-09-25 13:14:22

当心路径操纵;麻烦会找上你的。

看看http://docs.python.org/tutorial/modules.html

我已经在下面设置了我认为您想要做的事情。这应该有效。

文件结构:

/SConstruct.py
/custom_dir/
/custom_dir/__init__.py
/custom_dir/mymodule.py

/custom_dir/__init__.py 为空

/custom_dir/mymodule.py:

def foo():
    print 'foo'

/SConstruct.py:

import custom_dir.mymodule as mymodule

mymodule.foo()

Beware path manipulation; trouble will find you.

Take a look at http://docs.python.org/tutorial/modules.html

I've set up what I think you are trying to do below. This should work.

File structure:

/SConstruct.py
/custom_dir/
/custom_dir/__init__.py
/custom_dir/mymodule.py

/custom_dir/__init__.py is blank

/custom_dir/mymodule.py:

def foo():
    print 'foo'

/SConstruct.py:

import custom_dir.mymodule as mymodule

mymodule.foo()
友谊不毕业 2024-09-25 13:14:22

您可以从 SConstruct 以外的模块访问 SCons 类,例如环境,

from SCons.Script import *

请参阅文档 此处

另外,不要使用“.”。要指示构建树的根,您应该使用 Dir('#' ).path

You can access SCons classes, e.g. Environment from modules other than SConstruct by including

from SCons.Script import *

See the documentation here.

Also, rather than using '.' to indicate the root of the build tree, you should be using Dir('#').path.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文