未提供项目说明

shmakovpn的Python项目详细描述


什马科夫语

历史

PACKAGE_NAME=shmakovpn
PROJECT_NAME=${PACKAGE_NAME}_tools
PROJECT_DIR=~/${PROJECT_NAME}DOCS_DIR=${PROJECT_DIR}/docs
mkvirtualenv shmakovpn -p /usr/bin/python3.6
mkdir $PROJECT_DIRcd$PROJECT_DIR
touch README.md

# configuring .gitignore
touch .gitignore
echo'# IDEs' >> .gitignore
echo'.idea/' >> .gitignore
echo'' >> .gitignore
echo'# python' >> .gitignore
echo'*.pyc' >> .gitignore  #* comment for vim highlightecho'__pychache__/' >> .gitignore
echo'*.egg-info/' >> .gitignore  #* comment for vim hightlightecho'.eggs/' >> .gitignore
echo'' >> .gitignore
echo'# Django' >> .gitignore
echo'migrations/' >> .gitignore
echo'db.sqlite3' >> .gitignore
echo'settings.py' >> .gitignore
echo'manage.py' >> .gitignore
echo'' >> .gitignore
echo'# virtualenv' >> .gitignore
echo'venv/' >> .gitignore
echo'' >> .gitignore
echo'# sphinx' >> .gitignore
echo'docs/build/html/' >> .gitignore
echo'docs/build/doctrees/' >> .gitignore
echo'_build/' >> .gitignore
echo'_static/' >> .gitignore
echo'_templates/' >> .gitignore
echo'' >> .gitignore
echo'# codecov' >> .gitignore
echo'.coverage' >> .gitignore
echo'' >> .gitignore
echo'# pytest' >> .gitignore
echo'.pytest_cache/' >> .gitignore
echo'' >> .gitignore
echo'# vim swp' >> .gitignore
echo'*.swp' >> .gitignore  #* comment for vim highlightecho'' >> .gitignore
echo'# pytest cache' >> .gitignore
echo'.pytest_cache/' >> .gitignore
echo'' >> .gitignore
echo'# build' >> .gitignore
echo'build/' >> .gitignore
echo'dist/' >> .gitignore

# conguring requirements.txt
touch requirements.txt
## turning vim to IDEecho'pyflakes' >> requirements.txt
echo'pep8' >> requirements.txt
echo'pylint' >> requirements.txt
echo'ipython' >> requirements.txt
## sphinxecho'sphinx' >> requirements.txt
echo'sphinx-rtd-theme' >> requirements.txt
## shmakovpn whatprovidesecho'whatprovides' >> requirements.txt
## twine (need for uploading package to PyPI)echo'twine' >> requirements.txt

# installing packages
pip install --upgrade pip
pip install -r requirements.txt

# configuring travis-ci
touch .travis.yml
echo'language: python' >> .travis.yml
echo'sudo: false' >> .travis.yml
echo'jobs:' >> .travis.yml
echo'  include:' >> .travis.yml
echo'    - name: "Python 3.6 on Linux"' >> .travis.yml
echo'      python: "3.6"' >> .travis.yml
echo'    - name: "Python 3.7 on Linux"' >> .travis.yml
echo'      python: "3.7"' >> .travis.yml
echo'    - name: "Python 3.8 on Linux"' >> .travis.yml
echo'      python: "3.8"' >> .travis.yml
echo'    - name: "Python 3.8.0 on Windows"' >> .travis.yml
echo'      os: windows' >> .travis.yml
echo'      language: shell' >> .travis.yml
echo'      before_install:' >> .travis.yml
echo'        - choco install python --version 3.8.0' >> .travis.yml
echo'        - python -m pip install --upgrade pip' >> .travis.yml
echo'      env: PATH=/c/Python38:/c/Python38/Scripts:$PATH' >> .travis.yml
echo'install:' >> .travis.yml
echo'  - pip install -r requirements.txt' >> .travis.yml
echo'  - pip install codecov' >> .travis.yml
echo'  - pip install pytest-cov' >> .travis.yml
echo"script: coverage run -m pytest $PACKAGE_NAME/tests.py" >> .travis.yml
echo'after_success:' >> .travis.yml
echo'  - codecov' >> .travis.yml

# creating folders and files
mkdir $PACKAGE_NAME
touch $PACKAGE_NAME/__init__.py  # we will stay this file empty
touch $PACKAGE_NAME/version.py
echo"VERSION: str = '1.1'" >> $PACKAGE_NAME/version.py

# creating examle module
touch $PACKAGE_NAME/example.py
echo"def hello_world():" >> $PACKAGE_NAME/example.py
echo"    print('Hello World')" >> $PACKAGE_NAME/example.py

# reading versionVERSION=$(cat $PACKAGE_NAME/version.py | grep 'VERSION'| sed -re "s/^[^=]*=\s* '([^ #]*)'.*$/\1/")# sphinx quick start
sphinx-quickstart -q -p $PROJECT_NAME -a shmakovpn -v $VERSION -r $VERSION -l en --ext-autodoc --ext-intersphinx --ext-viewcode --ext-todo --sep $DOCS_DIR## change sphinx theme to sphinx_rtd_theme
sed -i $DOCS_DIR/source/conf.py -re "s/^html_theme = 'alabaster'/html_theme = 'sphinx_rtd_theme'/"## change imports
sed -i $DOCS_DIR/source/conf.py -re "s/^# import os/import os/"
sed -i $DOCS_DIR/source/conf.py -re "s/^# import sys/import sys/"## configuring sys.path
sed -i $DOCS_DIR/source/conf.py -re "s/^# sys\.path\.insert\(0, os\.path\.abspath\('\.'\)\)/PACKAGE: str='$PACKAGE_NAME'\nTEMP_LABEL1/"
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL1/SCRIPT_DIR: str = os.path.dirname(os.path.abspath(__file__))\nTEMP_LABEL2/"
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL2/DOCS_DIR: str = os.path.dirname(SCRIPT_DIR)\nTEMP_LABEL3/"
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL3/PROJECT_DIR: str = os.path.dirname(DOCS_DIR)\nTEMP_LABEL4/"
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL4/PACKAGE_DIR: str = os.path.join(PROJECT_DIR, PACKAGE)\nTEMP_LABEL5/"
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL5/sys.path.insert(0, PACKAGE_DIR)\nTEMP_LABEL6/"## configuring version
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL6/VERSION: str = ''\nTEMP_LABEL7/"
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL7/with open(os.path.join(PACKAGE_DIR, 'version.py')) as version_file:\nTEMP_LABEL8/"
sed -i $DOCS_DIR/source/conf.py -re "s/^TEMP_LABEL8/    exec(version_file.read())\n\n/"
sed -i $DOCS_DIR/source/conf.py -re "s/^(version\s*=\s*).*/\1'$VERSION'/"#* comment for vim highlight
sed -i $DOCS_DIR/source/conf.py -re "s/^(release\s*=\s*).*/\1'$VERSION'/"#* comment for vim hightlight## creating contents.rst for readthedocs.io
touch $DOCS_DIR/source/contents.rst
echo".. include:: index.rst" >> $DOCS_DIR/source/contents.rst

## creating introduction.rst
touch $DOCS_DIR/source/introduction.rst
echo"Introduction todo" >> $DOCS_DIR/source/introduction.rst

## adding introduction to index.rst
sed -i $DOCS_DIR/source/index.rst -re "s/^(\.\. toctree::)/.. include:: introduction.rst\n\n\1/"## adding documentation (not package!) requirements
touch $DOCS_DIR/requirements.txt

## adding code documentation
touch $DOCS_DIR/source/code.rst
echo'Code' >> $DOCS_DIR/source/code.rst
echo"====\n" >> $DOCS_DIR/source/code.rst
echo".. automodule:: example" >> $DOCS_DIR/source/code.rst
echo' :members:' >> $DOCS_DIR/source/code.rst

## adding code.rst to index.rst
sed -i $DOCS_DIR/source/index.rst -re 's/^(   :caption: Contents:)/\1\n\n   code/'# adding license
touch LICENSE.txt
echo"Copyright $PACKAGE_NAME shmakovpn" >> LICENSE.txt
echo'   Licensed under the Apache License, Version 2.0 (the "License");   you may not use this file except in compliance with the License.   You may obtain a copy of the License at       http://www.apache.org/licenses/LICENSE-2.0   Unless required by applicable law or agreed to in writing, software   distributed under the License is distributed on an "AS IS" BASIS,   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   See the License for the specific language governing permissions and   limitations under the License.' >>  LICENSE.txt

# creating manifest
touch MANIFEST.in
echo'include LICENSE.txt' >> MANIFEST.in
echo'include setup.cfg' >> MANIFEST.in
echo'include setup.py' >> MANIFEST.in
echo'include makedoc.py' >> MANIFEST.in
echo'include build_package.py' >> MANIFEST.in
echo'' >> MANIFEST.in
echo'recursive-include test *' >> MANIFEST.in #* comment for vim highlightecho'recursive-include docs *' >> MANIFEST.in #* comment for vim highlightecho'' >> MANIFEST.in
echo'recursive-exclude docs/build *' >> MANIFEST.in  #* comment for vim highlightecho'recursive-exclude * __pycache__' >> MANIFEST.in  #* comment for vim highlightecho'recursive-exclude * *.py[co]' >> MANIFEST.in 
echo'recursive-exclude .git *' >> MANIFEST.in  #* comment for vim highlightecho'recursive-exclude .idea *' >> MANIFEST.in  #* comment for vim highlightecho'recursive-exclude venv *' >> MANIFEST.in  #* comment for vim highlight# creating setup.cfg
touch setup.cfg
echo'[build_sphinx]' >> setup.cfg
echo'source-dir = docs/' >> setup.cfg
echo'build-dir = docs/build' >> setup.cfg
echo'all_files = 1' >> setup.cfg
echo'' >> setup.cfg
echo'[metadata]' >> setup.cfg
echo'license_file = LICENSE.txt' >> setup.cfg

# creating setup.py
touch setup.py
echo"import os" >> setup.py
echo"from setuptools import setup, find_packages" >> setup.py
echo"from ${PACKAGE_NAME}.version import VERSION" >> setup.py
echo"" >> setup.py
echo"SCRIPT_DIR: str = os.path.dirname(os.path.abspath(__file__))" >> setup.py
echo"os.chdir(SCRIPT_DIR)" >> setup.py
echo"" >> setup.py
echo"with open('README.md') as f:" >> setup.py
echo"    long_description: str = f.read()" >> setup.py
echo"" >> setup.py
echo"setup(" >> setup.py
echo"    name='$PACKAGE_NAME'," >> setup.py
echo"    version=VERSION," >> setup.py
echo"    packages=find_packages()," >> setup.py
echo"    author='shmakovpn'," >> setup.py
echo"    author_email='shmakovpn@yandex.ru'," >> setup.py
echo"    url='https://github.com/shmakovpn/$PROJECT_NAME'," >> setup.py
echo"    download_url='https://github.com/shmakovpn/$PROJECT_NAME/archive/%s.zip' % (VERSION, )," >> setup.py
echo"    long_description=long_description," >> setup.py
echo"    long_description_content_type='text/markdown'," >> setup.py
echo"    entry_points={" >> setup.py
#echo "        'console_scripts': ['$PACKAGE_NAME=$PACKAGE_NAME:main']," >> setup.pyecho"    }," >> setup.py
echo"    install_requires=[" >> setup.py
#echo "        'chardet'," >> setup.pyecho"    ]," >> setup.py
echo"    include_package_data=True," >> setup.py
echo"    test_suite='$PACKAGE_NAME.tests'," >> setup.py
echo"    python_requires='>=3.6'," >> setup.py
echo"    classifiers=[" >> setup.py
echo"        'Programming Language :: Python :: 3'," >> setup.py
#echo "        'Environment :: Console'," >> setup.pyecho"        'License :: OSI Approved :: Apache Software License'," >> setup.py
echo"        'Operating System :: OS Independent'," >> setup.py
echo"    ]," >> setup.py
echo")" >> setup.py

# creating build_package.py, script that runs *python setup.py sdist bdist_wheel*
touch build_package.py
echo"import os" >> build_package.py
echo"SCRIPT_DIR: str = os.path.dirname(os.path.abspath(__file__))" >> build_package.py
echo"" >> build_package.py
echo"" >> build_package.py
echo"def run_build():" >> build_package.py
echo"    os.chdir(SCRIPT_DIR)" >> build_package.py
echo"    os.system('python setup.py test')" >> build_package.py
echo"    os.system('python setup.py sdist bdist_wheel')" >> build_package.py
echo"    print('__END__')" >> build_package.py
echo"" >> build_package.py
echo"" >> build_package.py
echo"if __name__ == '__main__':" >> build_package.py
echo"    run_build()" >> build_package.py

# creating makedoc.py, script that runs *sphinx-build*
touch makedoc.py
echo"import os" >> makedoc.py
echo"SCRIPT_DIR: str = os.path.dirname(os.path.abspath(__file__))" >> makedoc.py
echo"" >> makedoc.py
echo"" >> makedoc.py
echo"def run_sphinx():" >> makedoc.py
echo"    docs_dir: str = os.path.join(SCRIPT_DIR, 'docs')" >> makedoc.py
echo"    docs_source_dir: str = os.path.join(docs_dir, 'source')" >> makedoc.py
echo"    build_dir: str = os.path.join(docs_dir, 'build')" >> makedoc.py
echo"    html_dir: str = os.path.join(build_dir, 'html')" >> makedoc.py
echo"    os.system('sphinx-build -b html \"%s\" \"%s\"' % (docs_source_dir, html_dir))" >> makedoc.py
echo"    print('__END__')" >> makedoc.py
echo"" >> makedoc.py
echo"" >> makedoc.py
echo"if __name__ == '__main__':" >> makedoc.py
echo"    run_sphinx()" >> makedoc.py

# creating upload_pypi.py
touch upload_pypi.py
echo"import os" >> upload_pypi.py
echo"import subprocess" >> upload_pypi.py
echo"from typing import List" >> upload_pypi.py
echo"from ${PACKAGE_NAME}.version import VERSION" >> upload_pypi.py
echo"" >> upload_pypi.py
echo"SCRIPT_DIR: str = os.path.dirname(os.path.abspath(__file__))" >> upload_pypi.py
echo"" >> upload_pypi.py
echo"" >> upload_pypi.py
echo"def get_pip_config():" >> upload_pypi.py
echo"    process: subprocess.Popen = subprocess.Popen(" >> upload_pypi.py
echo"        ['pip', 'config', 'list', ], stdout=subprocess.PIPE, stderr=subprocess.PIPE" >> upload_pypi.py
echo"    )" >> upload_pypi.py
echo"    process.wait()" >> upload_pypi.py
echo"    if not process.returncode:" >> upload_pypi.py
echo"        if process.stdout.readable():" >> upload_pypi.py
echo"            return list(map(lambda x: x.decode().rstrip(), process.stdout.readlines()))" >> upload_pypi.py
echo"        else:" >> upload_pypi.py
echo"            return []  # pip configuration is empty" >> upload_pypi.py
echo"    else:" >> upload_pypi.py
echo"        if process.stdout.readable():" >> upload_pypi.py
echo"            print(process.stdout.read().decode())" >> upload_pypi.py
echo"        if process.stderr.readable():" >> upload_pypi.py
echo"            print(process.stderr.read().decode())" >> upload_pypi.py
echo"        exit(1)" >> upload_pypi.py
echo"" >> upload_pypi.py
echo"" >> upload_pypi.py
echo"def run_upload():" >> upload_pypi.py
echo"    pip_certs: List[str] = list(filter(lambda x: str(x).startswith('global.cert='), get_pip_config()))" >> upload_pypi.py
echo"    if pip_certs:" >> upload_pypi.py
echo"        pip_cert_arg: str = '--cert %s ' % (pip_certs[0].split('=')[1])" >> upload_pypi.py
echo"    else:" >> upload_pypi.py
echo"        pip_cert_arg: str = ''" >> upload_pypi.py
echo"    print(pip_cert_arg)" >> upload_pypi.py
echo"    dist_dir: str = os.path.join(SCRIPT_DIR, 'dist')" >> upload_pypi.py
echo"    dist_file: str = os.path.join(dist_dir, '${PACKAGE_NAME}-%s.tar.gz' % (VERSION, ))" >> upload_pypi.py
echo"    dist_whls: str = os.path.join(dist_dir, '${PACKAGE_NAME}-%s-*.whl' % (VERSION, ))" >> upload_pypi.py  #* comment for vim highlightecho"    os.system('twine upload \"%s\" \"%s\" %s --verbose' % (dist_file, dist_whls, pip_cert_arg))" >> upload_pypi.py
echo"    print('__end__')" >> upload_pypi.py
echo"" >> upload_pypi.py
echo"" >> upload_pypi.py
echo"if __name__ == '__main__':" >> upload_pypi.py
echo"    run_upload()" >> upload_pypi.py

# creating tests.py
touch $PACKAGE_NAME/tests.py
echo"import unittest" >> $PACKAGE_NAME/tests.py

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
无法在Netbeans 8.2 JDK8u231中创建java Maven项目(Web应用程序)   java如何以设定的时间间隔生成随机数?   java从socket和inputStream的慢速读取   spring SCORM:Java中基于Web的SCORM播放器   Java将函数传递给方法   java绑定通用服务及其实现和子类型   java如何在运行时从选择列表框中动态选择选项?爪哇硒   java Selenium WebDriver什么是“Selenium客户端和WebDriver语言绑定”   elasticsearch需要elasticsearch高级Java客户端更新ByQueryRequest API帮助   JAVA哈希表查找最大值   WSDL操作中的java soapAction属性为空   java访问封闭类或父类方法的一般方法   eclipse在java中运行带有SeleneTestCase的ANT。lang.NoClassDefFoundError   java Hazelcast不会在节点启动时填充ReplicatedMap   如何在Java中从excel中读取特定行?   html JAVA将本地时间(GMT+8)转换为UTC时间   java将自定义端点添加到Spring数据REST存储库中,并以大摇大摆的方式显示   java计算未来位置