python-项目骨架(powershell)
1.安装virtualenv
cd ~ pip list #查看pip安装列表 pip install virtualenv
2.创建文件夹,在里面安装虚拟环境
mkdir .venvs
virtualenvs --system-site-package .venvs/lpthw
3.激活虚拟环境
PS C:\Users\xxxx> .\.venvs\lpthw\Scripts\activate
(lpthw) PS C:\Users\xxxx>
在powershell执行脚本时报错,原因是powershell默认执行策略为Restricted,不支持运行脚本,可以对策略进行更改
PS C:\Users\xxxx> .\.venvs\lpthw\Scripts\activate .\.venvs\lpthw\Scripts\activate : 无法加载文件 C:\Users\crystaldu\.venvs\lpthw\Scripts\activate.ps1,因为在此系统上禁止 运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1 + .\.venvs\lpthw\Scripts\activate + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [],PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
①查询当前策略
PS C:\Users\xxxxx> get-executionpolicy
②更改当前策略为remotesigned,关于更多执行策略可以参考:https://docs.microsoft.com/zh-cn/powershell/module/microsoft.powershell.core/about/about_execution_policies?view=powershell-6
PS C:\Users\xxxx> set-executionpolicy remotesigned
4.创建骨架项目目录
mkdir -p projects/skeleton/bin #创建一个多级目录,-p 用/隔开 cd projects/skeleton/bin mkdir -p bin,NAME,tests,docs #创建多个同级目录,-p 用,隔开
5.设置初始文件
(lpthw) PS C:\Users\xxx\projects\skeleton> new-item -type file NAME/__init__.py (lpthw) PS C:\Users\xxx\projects\skeleton> new-item -type file tests/__init__.py
6.安装文件 setup.py 【C:\Users\xxxx\projects\skeleton\】
try: from setuptools import setup except ImportError: from distutils.core import setup config = { 'description': 'My Project', 'author': 'xxxx', 'url': 'https://www.cnblogs.com/ohlala/', 'download_url': 'xxxxx', 'author_email': 'xxxx@163.com', 'version': '0.1', 'install_requires': ['nose'], 'packages':['NAME'], 'scripts':[], 'name': 'projectname' } setup(**config)
创建NAME_tests.py 【C:\Users\xxxx\projects\skeleton\tests】
from nose.tools import * import NAME def setup(): print("SETUP!") def teardown(): print("TEAR DOWN!") def test_basic(): print("I RAN!", end='')
7.复制项目骨架
(lpthw) PS C:\Users\xxx\projects> cp -r .\skeleton\ ex47 (lpthw) PS C:\Users\xxx\projects\ex47> ls 目录: C:\Users\xxx\projects\ex47 Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2019/9/4 10:54 bin d----- 2019/9/4 10:54 docs d----- 2019/9/4 10:54 NAME d----- 2019/9/4 10:54 tests -a---- 2019/9/4 10:17 469 setup.py (lpthw) PS C:\Users\xxx\projects\ex47> mv NAME ex47 (lpthw) PS C:\Users\xxx\projects\ex47> ls 目录: C:\Users\xxx\projects\ex47 Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2019/9/4 10:54 bin d----- 2019/9/4 10:54 docs d----- 2019/9/4 10:54 ex47 d----- 2019/9/4 10:54 tests -a---- 2019/9/4 10:17 469 setup.py
(lpthw) PS C:\Users\xxx\projects\ex47> mv .\tests\NAME_tests.py ex47_tests.py
然后修改ex47_tests.py中的代码
from nose.tools import * import ex47 def setup(): print("SETUP!") def teardown(): print("TEAR DOWN!") def test_basic(): print("I RAN!", end='')
修改后执行nosetests进行测试
(lpthw) PS C:\Users\crystaldu\projects\ex47> nosetests . ---------------------------------------------------------------------- Ran 1 test in 0.037s OK (lpthw) PS C:\Users\crystaldu\projects\ex47> nosetests -s SETUP! .I RAN!TEAR DOWN! ---------------------------------------------------------------------- Ran 1 test in 0.031s OK
8.安装
(lpthw) PS C:\Users\xxx\projects\ex47> python .\setup.py install running install running bdist_egg running egg_info creating ex47.egg-info writing ex47.egg-info\PKG-INFO writing dependency_links to ex47.egg-info\dependency_links.txt writing requirements to ex47.egg-info\requires.txt writing top-level names to ex47.egg-info\top_level.txt writing manifest file 'ex47.egg-info\SOURCES.txt' reading manifest file 'ex47.egg-info\SOURCES.txt' writing manifest file 'ex47.egg-info\SOURCES.txt' installing library code to build\bdist.win-amd64\egg running install_lib running build_py creating build creating build\lib creating build\lib\ex47 copying ex47\__init__.py -> build\lib\ex47 creating build\bdist.win-amd64 creating build\bdist.win-amd64\egg creating build\bdist.win-amd64\egg\ex47 copying build\lib\ex47\__init__.py -> build\bdist.win-amd64\egg\ex47 byte-compiling build\bdist.win-amd64\egg\ex47\__init__.py to __init__.cpython-37.pyc creating build\bdist.win-amd64\egg\EGG-INFO copying ex47.egg-info\PKG-INFO -> build\bdist.win-amd64\egg\EGG-INFO copying ex47.egg-info\SOURCES.txt -> build\bdist.win-amd64\egg\EGG-INFO copying ex47.egg-info\dependency_links.txt -> build\bdist.win-amd64\egg\EGG-INFO copying ex47.egg-info\requires.txt -> build\bdist.win-amd64\egg\EGG-INFO copying ex47.egg-info\top_level.txt -> build\bdist.win-amd64\egg\EGG-INFO zip_safe flag not set; analyzing archive contents... creating dist creating 'dist\ex47-1.0-py3.7.egg' and adding 'build\bdist.win-amd64\egg' to it removing 'build\bdist.win-amd64\egg' (and everything under it) Processing ex47-1.0-py3.7.egg Copying ex47-1.0-py3.7.egg to c:\users\xxx\.venvs\lpthw\lib\site-packages Adding ex47 1.0 to easy-install.pth file Installed c:\users\xxx\.venvs\lpthw\lib\site-packages\ex47-1.0-py3.7.egg Processing dependencies for ex47==1.0 Searching for nose==1.3.7 Best match: nose 1.3.7 Adding nose 1.3.7 to easy-install.pth file Installing nosetests-script.py script to C:\Users\xxx\.venvs\lpthw\Scripts Installing nosetests.exe script to C:\Users\xxx\.venvs\lpthw\Scripts Installing nosetests-3.4-script.py script to C:\Users\xxx\.venvs\lpthw\Scripts Installing nosetests-3.4.exe script to C:\Users\xxx\.venvs\lpthw\Scripts Using c:\users\xxx\.venvs\lpthw\lib\site-packages Finished processing dependencies for ex47==1.0 (lpthw) PS C:\Users\xxx\projects\ex47>
9.卸载
(lpthw) PS C:\Users\xxx\projects\ex47> pip uninstall ex47 Uninstalling ex47-1.0: Would remove: c:\users\xxx\.venvs\lpthw\lib\site-packages\ex47-1.0-py3.7.egg Proceed (y/n)? y Successfully uninstalled ex47-1.0 (lpthw) PS C:\Users\xxx\projects\ex47>