您的位置:新葡亰496net > 奥门新萄京娱乐场 > 新葡亰496net:Python3导入自定义模块的3种方法,

新葡亰496net:Python3导入自定义模块的3种方法,

发布时间:2019-11-23 15:39编辑:奥门新萄京娱乐场浏览(162)

      经过大半年的工作的经历,我觉得作为一个IT工作者,学习一门编程语言是非常有必要的,所以还是捡起最初的梦想,开始吧Today!!!

    准备工作

    到cocos2d官方网站下载最新版本

    这两天,偶尔再次看了遍这篇文章,并且对Fabric感兴趣,或许我管理一些服务器时也许还能用得上,所以花了点时间简单了解了一下Fabric。

    前言:最近突然想学习游戏开发, 所以就想搞搞看,学习学习.

    前话

    最近跟着廖雪峰的教程学到 模块 这一节。关于如何自定义一个模块,如果大家不懂的话还请先看下面这篇博文 ↓

    )

    新葡亰496net:Python3导入自定义模块的3种方法,Mac下cocos2d费用条件搭建。模块是个好东西啊,大牛们开源共享许多模块也加快了大家开发的速度,许多开源模块可以在这里找到 ↓

    因为刚入门所有有很多细节不懂,在网上搜寻资料的时候发现各位大神们的教程实在太过于精简,让我这个菜鸟很辛苦的才操作成功。

    因此在这里记录下来。


    本人小白,给个机会,多多关照。不喜勿喷,谢谢!

    创建第一个Helloword项目

    1. 将下载下来的压缩包解压
    2. 进入到目录cocos2d-x-3.12/tools/cocos2d-console/bin/
    3. 打开终端运行cocos.py脚本创建文件
      python cocos.py new HelloWorldDemo -p com.coco2dx.org -l cpp -d ~/Desktop

    首先,Fabric是什么呢? Fabric是一个Python库和命令行工具,它可以将使用SSH操作的应用部署或系统管理任务更加地高效(流水线化)。
    Fabric is a Python (2.5 or higher) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.
    Fabric提供了一些核心API和外围API,见:
    (Fabric还提供了多进程让任务并行执行,是通过Python自带的multiprocessing module来实现的,不过目前并非线程安全的哦。)

    1.当前iOS端游戏开发的框架:

    iOS端开发游戏有三中框架,第一种是cocos2d,它是OC写的,第二种是cocos2dx,它是c 写的,第三种是SpriteKit,苹果自己官方封装的API库.

    国内比较多的使用还是前两者,cocos2d只能在ios下运行,cocos2dx是跨平台的,ios和android平台都可以运行,cocos2d是外国人搞的,cocos2dx是中国人搞的。cocos2dx是cocos2d的C 写法,但是游戏架构是一样的,都包含了精灵,导演,场景,动作等概念,他们是一脉相承的东西。你可以直接研究cocos2dx,没有什么障碍。虽然是有了cocos2d才有的cocos2dx,但是cocos2dx包含了cocos2d的主要思想,因此可以直接研究cocos2dx。所以我们直接指导,结合Xcode搭建Cocos2d-X开发环境!

    下载地址https://github.com/cocos2d/cocos2d-x**

    开始

    第一个程序:Hello word !  

    参数说明

    -p后面接包名
    -l后面接语言名
    -d新葡亰496net:Python3导入自定义模块的3种方法,Mac下cocos2d费用条件搭建。后面接工程存储目录

    然后,安装Fabric试用一下吧。参见:
    我是下载源代码,运行“python setup.py install”来安装的,在Ubuntu上也可以使用“sudo apt-get install fabric”来直接安装。

    2. 将下载的压缩包解压, 打开得到文件其结构如下:

    新葡亰496net 1

    下载文件结构

    我们来对以上结构文件梳理一下

    build : 指多平台的框架文件存放的目录
    cocos: 框架核心目录 里面存放了Cocos2d-x的核心代码。

    docs:文档目录 可以使用该目录下的doxygen.config 文件创建离线文档

    extensions:扩展目录 存放了一些官方的扩展 包括更多图形用户界面的控制功能 网络访问 CocosBuilder 等

    external:存放扩展需要用到的物理引擎 包括box2d和chipmunk

    licenses: cocos2d依赖很多开源项目,所有的授权许可文件都在这个目录

    plugin:plugin-x 项目目录,plugin -x 是一个可以快速接入第三方idk的框架

    templates:该目录包括在不同集成环境及不同平台中创建Cocos2d-x 新项目的模板

    test:测试项目 这是我们最开始用到的文件 在 cpp-tests 项目中包含所有类的用法 lua 和js 样本也在这个目录

    tools: 需要用到的工具 Cocos2d-console 目录中包含了创建Cocos2d-x项目的脚本 可以针对不同的平台进行开发环境的搭建 同时 还包括将c 绑定至lua 及JavaScript 的脚本文件

    第一种,直接 import

    这里有个大前提,就是你的py执行文件和模块同属于同个目录(父级目录),如下图:

    新葡亰496net 2

    • main.py 和 pwcong模块同在python目录
    • 执行文件为main.py
    • pwcong文件夹为一个模块

    我把pwcong模块提供的函数写在 __init__.py 里,里面只提供一个 hi 函数:

    # pwcong 模块的 __init__.py
    # -*- coding: utf-8 -*-
    
    def hi():
        print("hi")
    

    执行文件main.py直接import模块:

    # main.py
    # -*- coding: utf-8 -*-
    
    import pwcong
    
    pwcong.hi()
    

    接着我们运行一下main.py可以看到命令行窗口输出了一句 hi ,第一种方式完成。

    使用模块方式为:先导入-》接着输入模块.变量|函数, 如上面例子的 pwcong.hi()


    附代码:

    接下来,试一个Helloword这样的例子吧。
    编辑一个名为test-fabric.py的文件,内容如下:

    3.Cocos2d-x的安装及配置

    Cocos2d-x 从2.1.4 版 之后已经不再支持使用模板来生成项目 而是使用官方提供的python 直接创建项目 也就是说Cocos2d-x 不能安装到Xcode上面,不能使用Xcode的Cocos2d-x模板一步一步的生成项目,只能使用Xcode来打开已经创建好的项目

    第二种,通过sys模块导入自定义模块的path

    如果执行文件和模块不在同一目录,这时候直接import是找不到自定义模块的。如下图:

    新葡亰496net 3

    • 执行文件main.py在main目录下
    • pwcong模块在python目录下

    sys模块是python内置的,因此我们导入自定义模块的步骤如下:

    1. 先导入sys模块

    2. 然后通过sys.path.append(path) 函数来导入自定义模块所在的目录

    3. 导入自定义模块。

    这时候 main.py 这样写:

    # main.py
    # -*- coding: utf-8 -*-
    
    import sys
    sys.path.append(r"C:UsersPwcongDesktoppython")
    
    import pwcong
    
    pwcong.hi()
    

    最后执行main.py文件,最终输出 hi ,第二种方式完成。


    新葡亰496net 4新葡亰496net 5

     代码如下

    1>创建项目步骤如下:

    ①打开终端cd上面下载的Cocos2d-x目录下

    小码农-Mac-Mini:~ 小码农$ cd /Users/小码农/Desktop/cocos2d-x 
    

    ② 打开终端执行Cocos2d-x目录下.setup.py 运行改文件用来配置系统的一些环境变量

    小码农-Mac-Mini:cocos2d-x 小码农$ ./setup.py
    

    填坑:执行.setup.py时候,出现Please enter the path of ANT_ROOT (or press Enter to skip):,问题原因是让你输入 android sdk的根目录.
    解决方法:
    第一步:下载android的sdk以及ndk
    http://developer.android.com/sdk/index.html, 然后输入下载这个包的路径即可(如图下载ant) 或者 直接cocos --help,去ignore`
    第二步:然后在终端中执行source /Users/小码农/.bash_profile
    第三步(此步可以忽略):最后终端我们执行以下 cocos -h,输入N,我们会看到cocos2d-x 的命令行工具集(图2)

    新葡亰496net 6

    下载ant

    新葡亰496net 7

    图1

    新葡亰496net 8

    图2

    ②打开终端执行cocos new HelloWorld -p com.sylCompany.HelloWorld -l cpp -d ~/Desktop/如果成功会出现图3所示

    新葡亰496net 9

    图3

    ③完成以上步骤,我们就可以带桌面上看到自己创建的Helloword文件,打开文件你会看到如图4所示的文件结构,进入proj.ios_mac双击HelloCPP.xcodeproj文件使用快捷键(command

    • R)运行程序,就可以在iOS 模拟器上看淡经典的Hello world画面.

    新葡亰496net 10

    图4

    参考文章:http://www.cocoachina.com/bbs/read.php?tid=199238

    第三种,通过pth文件找到自定义模块

    这个方法原理就是利用了系统变量,python会扫描path变量的路径来导入模块,可以在系统path里面添加。但是我还是推荐使用pth文件添加。

    模块和执行文件目录结构跟上图一样:

    新葡亰496net 11

    • 执行文件main.py在main目录下
    • pwcong模块在python目录下

    我们创建一个 module_pwcong.pth 文件,里面内容就是 pwcong模块所在的目录:

    C:UsersPwcongDesktoppython
    

    将该 module_pwcong.pth 文件放到这里:
    python安装目录Python35Libsite-packages

    例如我的:
    新葡亰496net 12

    然后 main.py 导入并使用自定义模块:

    # -*- coding: utf-8 -*-
    
    import pwcong
    
    pwcong.hi()
    

    最后执行 main.py 文件,可以输出 hi ,第三种方式完成。


    1 #author:JIE Brunce
    2 print("Hello Word!")
    

    from fabric.api import run
     
    def host_type():
        run('uname -s')

    结束

    到这里三种导入自定义模块的方式栗子就完成了,我写的应该很详细了吧 :)

    View Code

    通过Fabric来执行它,命令行如下:

     

     代码如下

     
    

    [root@jay-linux jay]# fab -H jay-linux host_type
     
    Fatal error: Couldn't find any fabfiles!
     
    Remember that -f can be used to specify fabfile path, and use -h for help.
     
    Aborting.
    [root@jay-linux jay]# fab -H jay-linux -f test-fabric.py host_type
    [jay-linux] Executing task 'host_type'
    [jay-linux] run: uname -s
    [jay-linux] Login password for 'root':
    [jay-linux] out: Linux
    [jay-linux] out:
     
     
    Done.
    Disconnecting from jay-linux... done.

    执行方式:

    执行第一个命令运行时,遇到了“Fatal error: Couldn’t find any fabfiles!”错误,是因为fab没有找到fabfile。
    如果没有用“-f test-fabric.py”参数来指定使用哪个fabfile,那么fab命令会默认使用fabfile.py这个名称在当前目前及其父附录中去寻找fabfile.py文件(在Linux上它不搜寻最高层的根目录)。
    所以,解决fabfile找到的问题的方法主要有如下3个:

    1. MDdos中执行:python    c:/pycc/Helloword.py 
    1. “-f your-fabfile.py”来指定自己的fabfile;
    2. 就在当前目录中将自己的任务编辑好并命名为 fabfile.py;
      3. 可以将默认的fabfile定义在fabric的配置文件,如:在~/.fabricrc文件中指定“fabfile = fab_tasks.py”.
      关于Fabric如何查找fabfile的方法,请参考:
      或者可以直接查看源代码中fabric/main.py文件中的find_fabfile(names=None)。

                       或者:先 cd /pycc ,再 Helloword.py

    最后,在fabric中可以将主机名、用户名、密码等信息写在fabfile中,但是真的不推荐将明文写在代码中,还是最好使用SSH的Key来认证吧。所以如下我就用Fabric写了一个例子(就在名为fabfile.py文件中),将我的总控机器(my-master)的Key分发到需要被控制的机器上取得SSH key的认证,今后操作那些机器时就不用输入登录密码来交互了。注意“@roles(‘master’)”这样的修饰,这也是Fabric提供的功能,让任务在指定的机器上执行。

    1. 其他方式:我用的是Pycharm,直接点击按钮执行即可,有错误会提示。

     代码如下

    #!/usr/bin/python
     
    from fabric.colors import red, green
    from fabric.context_managers import cd
    from fabric.operations import *
    from fabric.api import *
     
    env.roledefs = {
        'master':['my-master'],
        'slave':['vt9', 'vt7', 'vt2']
        }
    #env.hosts = ['my-master', 'vt9', 'vt7', 'vt1', 'vt2']
    #env.passwords = {'jay-linux':'123456', 'my-master':'123456'}
    env.password = '123456'
     
    def color():
        local('ls -l | wc -l')
        print(red("This sentence is red, except for ", bold=True)
                green("these words, which are green."))
     
    def ctx_mgr():
        with cd('/var/www'):
            run('ls')
     
    @roles('master')
    def get_sshkey():
        get('/root/.ssh/id_rsa.pub', 'id_rsa.pub.master')
     
    @roles('slave')
    def put_sshkey():
        with cd('/tmp'):
            put('id_rsa.pub.master', 'id_rsa.pub.master')
            run('cat id_rsa.pub.master >> /root/.ssh/authorized_keys')
     
    def do_task():
        execute(get_sshkey)
        execute(put_sshkey)

    该示例程序的,执行如下:

     代码如下

    [root@jay-linux jay]# fab do_task
    [my-master] Executing task 'get_sshkey'
    [my-master] download: /root/jay/id_rsa.pub.master <- /root/.ssh/id_rsa.pub
    [vt9] Executing task 'put_sshkey'
    [vt9] put: id_rsa.pub.master -> /tmp/id_rsa.pub.master
    [vt9] run: cat id_rsa.pub.master >> /root/.ssh/authorized_keys
    [vt7] Executing task 'put_sshkey'
    [vt7] put: id_rsa.pub.master -> /tmp/id_rsa.pub.master
    [vt7] run: cat id_rsa.pub.master >> /root/.ssh/authorized_keys
    [vt2] Executing task 'put_sshkey'
    [vt2] put: id_rsa.pub.master -> /tmp/id_rsa.pub.master
    [vt2] run: cat id_rsa.pub.master >> /root/.ssh/authorized_keys
     
    Done.
    Disconnecting from my-master... done.
    Disconnecting from vt7... done.
    Disconnecting from vt9... done.
    Disconnecting from vt2... done.

    总之,使用了一下Fabric,感觉用起来还是比较方便的,用Python定义自己的任务。要是管理的服务器数量较大,并且上面执行的操作比较重复时,Fabric应该是个不错的选择。

    参考资料:
    Fabric官方文档:

    本文由新葡亰496net发布于奥门新萄京娱乐场,转载请注明出处:新葡亰496net:Python3导入自定义模块的3种方法,

    关键词: