在“艰难学习python”中,作者声明我们可以导入脚本而无需使用python ex25.py
。我们可以import ex25
,脚本将运行。
当我这样做时,我得到:
>>> import ex25
Traceback (most recent call last):
File "<stdin>", line 1, in <modul
ImportError: No module named ex25
作者声明它看起来像这样
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import ex25
>>> sentence = "All good things come to those who wait."
>>> words = ex25.break_words(sentence)
>>> words
['All', 'good', 'things', 'come', 'to', 'those', 'who', 'wait.']
>>> sorted_words = ex25.sort_words(words)
>>> sorted_words
['All', 'come', 'good', 'things', 'those', 'to', 'wait.', 'who']
>>> ex25.print_first_word(words)
All
>>> ex25.print_last_word(words)
wait.
>>> wrods
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'wrods' is not defined
>>> words
['good', 'things', 'come', 'to', 'those', 'who']
>>> ex25.print_first_word(sorted_words)
All
>>> ex25.print_last_word(sorted_words)
who
>>> sorted_words
似乎Python无法找到ex25
。也许我需要将它放在Python 27目录中?但是,如果我需要将所有.py
文件放在那里,我如何保留一个干净的目录?
当我没有得到第一个挑战(找不到文件)时,我得到:
>>> import ex25
>>>
似乎没有发生任何事情。
答案 0 :(得分:3)
在您的系统配置中,您将找到一个变量调用PythonPath(默认C:\Python27
)。从命令行运行python
命令时,它将检查当前目录(默认C:\Users\[Your Name]
)和PythonPath指定的目录。
如果你想运行你的程序,你需要:
cd Desktop
如果您使用IDLE,则无需使用控制台,只需按F5即可运行程序。
答案 1 :(得分:2)
如果要在python中导入包(例如ex25),您应该以特定的方式构建源代码:
.
└── ex25 # <- package name = folder name
├── __init__.py # <- can be empty
└── lib.py # <- contains your class or code
如果您要导入此包,请执行以下操作:
>> import ex25
如果要在lib文件中导入特定类“DummyClass”,请执行以下操作:
>> from ex25.lib import DummyClass
>> class B(DummyClass):
pass
然后继续使用您的代码。
至于python学习书籍,我建议你选择任何你觉得容易入手的东西并继续使用它。一个网站或一本书。
希望这有帮助。
编辑:(编辑问题后)
我对这本书一无所知,但看起来书中附带了一些已编写的源代码和包。尝试获取源代码,你应该找到一个名为“ex25”的文件夹..可能。
答案 2 :(得分:1)
此外,Unix变种上的当前目录,或每个shell会话一个班轮:
export PYTHONPATH=$PYTHONPATH:/some/path
或者将该行添加到.bash_profile,.bashrc,.profile或其他任何首选项,以便每次创建shell /终端时让python检查该文件夹。
或者对于Windows:
set PYTHONPATH=%PYTHONPATH%;C:\path\to\files
并使用autoexec.bat
进行设置更好的是,以编程方式导入:
sys.path.append
另见:
答案 3 :(得分:1)
您可以通过在包含其他Python文件的目录中放置一个名为__init__.py
的空文件来在Python中创建包。一旦这样做,您可以集体或单独导入该目录,或该目录中的任何python脚本,或该目录中python脚本中的任何模块或函数。也就是说,只要该目录位于Python/lib
中,或者保存在导入它的Python脚本的目录中。
替代方法是将库所在的路径添加到Python的搜索路径中。你可以这样做:
from sys import path
path.append('The absolute path to your module/library')
答案 4 :(得分:1)
Python中的库创建和模块实现/导入示例。
<强>层次强>
.
├── package_a
│ ├── __init__.py
│ ├── mod_a.py
│ └── mod_b.py
└── package_b
├── __init__.py
├── mod_a2.py
└── mod_b2.py
<强>目录强>
单个文件包含:
文件名package_a/__init__.py
:
#!/usr/bin/env python3
文件名package_a/mode_a.py
:
#!/usr/bin/env python3
MOD_A_CONSTANT = 5
文件名package_a/mod_b.py
:
#!/usr/bin/env python3
from package_a.mod_a import MOD_A_CONSTANT
class MyModClass(object):
class_prop = 'This is MOD_A_CONSTANT from mod_b class: {}'.format(MOD_A_CONSTANT)
def __str__(self):
return self.class_prop
if __name__ == '__main__':
test = MyModClass()
print(test)
# Displays: This is MOD_A_CONSTANT from mod_b class: 5
文件名package_b/__init__.py
:
#!/usr/bin/env python3
文件名package_b/mod_a.py
:
#!/usr/bin/env python3
from package_a import mod_a, mod_b
def string_args():
resp = (
'mod_a.MOD_A_CONSTANT: {} | '
'mod_b.MyModClass.class_prop: {}'.format(
mod_a.MOD_A_CONSTANT,
mod_b.MyModClass.class_prop
)
)
return resp
# Displays: mod_a.MOD_A_CONSTANT: 5 | mod_b.MyModClass.class_prop: This is MOD_A_CONSTANT from mod_b class: 5
if __name__ == '__main__':
print(string_args())
文件名package/mod_b2.py
:
#!/usr/bin/env python3
from package_b.mod_a2 import string_args
class MyMod2Class(object):
def __str__(self):
return string_args()
if __name__ == '__main__':
test = MyMod2Class()
print(str(test).replace('|', '\n\n'))
# Displays:
# mod_a.MOD_A_CONSTANT: 5
#
# mod_b.MyModClass.class_prop This is MOD_A_CONSTANT from mod_b class: 5
这应该告诉您在Python中创建,导入和实现模块和库所需的全部内容。