From f875854858d72a52f74b63b18081e8e86930c8aa Mon Sep 17 00:00:00 2001 From: Yuanle Song Date: Wed, 27 Feb 2019 22:25:49 +0800 Subject: [PATCH] v1.4.2 fix .gitignore not included in jar issue --- operational | 110 +++++++++++++++++- project.clj | 10 +- src/leiningen/new/python.clj | 6 +- src/leiningen/new/python/README-dev.rst | 86 ++++++++++++++ .../new/python/{.gitignore => gitignore} | 0 5 files changed, 202 insertions(+), 10 deletions(-) create mode 100644 src/leiningen/new/python/README-dev.rst rename src/leiningen/new/python/{.gitignore => gitignore} (100%) diff --git a/operational b/operational index dde9cb8..3359108 100644 --- a/operational +++ b/operational @@ -1,6 +1,6 @@ * COMMENT -*- mode: org -*- #+Date: 2014-05-09 -Time-stamp: <2018-05-02> +Time-stamp: <2019-02-27> #+STARTUP: content * notes :entry: ** 2018-05-02 support test, build and deploy in gocd @@ -48,6 +48,8 @@ Time-stamp: <2018-05-02> * current :entry: ** +** 2019-02-24 fix :url in project.clj +create a blog post about this template. ** 2016-09-08 support updating site file, deb scripts etc after project is generated. - the domain in site file could change. - the pkg name could change. @@ -80,6 +82,112 @@ see example ~/.pylintrc ** 2014-05-09 add sphinx support * later :entry: * done :entry: +** 2019-02-24 drop :repositories from project.clj +** 2019-02-27 another problem on new created project. +make test fail on new project. + +futures requires Python '>=2.6, <3' but the running Python is 3.5.3 + +one pkg in requirements-dev.txt has bad dependencies. + +pylint has problem. + +#+BEGIN_SRC sh + Collecting futures (from isort>=4.2.5->pylint) + Using cached https://pypi.tuna.tsinghua.edu.cn/packages/1f/9e/7b2ff7e965fc654592269f2906ade1c7d705f1bf25b7d469fa153f7d19eb/futures-3.2.0.tar.gz + futures requires Python '>=2.6, <3' but the running Python is 3.5.3 +#+END_SRC + +- search: pylint futures requires Python '>=2.6, <3' but the running Python is 3.5.3 + search: isort futures broken + +- try fix isort to older version. + isort is used to sort import statements. it has no dependencies. + + what does that collect line mean? + + // isort does have dependencies. I fixed isort to 4.2.5 and it works. + + https://github.com/timothycrosley/isort/blob/4.3.9/setup.py + install_requires=['futures; python_version < "3.2"'], + it has required futures pkg. + + the setup.py syntax changed in v4.3.5 + v4.3.4 should work fine. + + old syntax: + install_requires = [] + if sys.version_info.major == 2: + install_requires = ['futures'] + ... + install_requires=install_requires, + + new syntax: + install_requires=['futures; python_version < "3.2"'], + + the new syntax doc: + + Building and Distributing Packages with Setuptools — setuptools 40.8.0 documentation + https://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-platform-specific-dependencies + Declaring platform specific dependencies + PEP 508 -- Dependency specification for Python Software Packages | Python.org + https://www.python.org/dev/peps/pep-0508/ + Created: 11-Nov-2015 + + which setuptools version start to support this feature? + + Why I hit this problem today? This is old stuff. + isort 4.3.5 released on Feb 25, 2019. + more people will be hit by this soon. + + does newer pip have the problem? yes. + using setuptools 28.8.0 Nov 2016 + + after upgrading setuptools and pip, still have problem installing latest + isort pkg. + +- reproduce + mkdir ~/d/t3 + cd ~/d/t3 + virtualenv .venv + .venv/bin/pip install isort + .venv/bin/pip install --no-cache-dir isort + .venv/bin/pip uninstall isort + + this fails on python 3.5.3 on debian stretch. + I think the virtualenv is too old. + python3 -m venv .venv + works fine on stretch live distro. + + but python3 -m venv also fails on ryzen5. why? + + It may be my local environment's problem. God know which component's problem. + + try use no cache. + no cache worked! + +- how to removed the cached version of isort? + + sylecn@ryzen5:~/d/t3$ du -sh ~/.cache/pip + 239M /home/sylecn/.cache/pip + sylecn@ryzen5:~/d/t3$ + +- search: python pip cache and platform specific dependencies + +- Because it's local cache problem. I will just clear local pip cache. and + also upgrade local pip. + +** 2019-02-27 after I upgraded lein, new lein install new version has an error. +Template resource 'leiningen/new/python/.gitignore' not found. + +.gitignore file does not get included into a template · Issue #2522 · technomancy/leiningen · GitHub +https://github.com/technomancy/leiningen/issues/2522 + +This is a known problem. + +** 2019-02-27 add document in project README on how to do CD. +added README-dev.rst + ** 2016-07-27 package name should not have -, auto convert it to _. - package name is part of module name, - is not valid there. diff --git a/project.clj b/project.clj index f52783d..67e20d7 100644 --- a/project.clj +++ b/project.clj @@ -1,12 +1,6 @@ -(defproject python/lein-template "1.4.1" +(defproject python/lein-template "1.4.2" :description "lein template for a python project" - :repositories [["snapshots" - {:url "http://devserv.game.yy.com/nexus/content/repositories/snapshots" - :creds :gpg}] - ["releases" - {:url "http://devserv.game.yy.com/nexus/content/repositories/releases" - :creds :gpg}]] - :url "http://emacsos.com/lein/python" + :url "https://blog.emacsos.com/python-project-template" :license {:name "Eclipse Public License" :url "http://www.eclipse.org/legal/epl-v10.html"} :eval-in-leiningen true) diff --git a/src/leiningen/new/python.clj b/src/leiningen/new/python.clj index dcf5ea6..77a3086 100644 --- a/src/leiningen/new/python.clj +++ b/src/leiningen/new/python.clj @@ -39,6 +39,8 @@ :date (let [cal (Calendar/getInstance)] (.format (new SimpleDateFormat "yyyy-MM-dd") (.getTime cal)))} + dot-template-files ["gitignore" + ] template-files ["Makefile" "fabfile.py" "tox.ini" @@ -48,6 +50,7 @@ "Dockerfile.template" "app.yaml" "README.rst" + "README-dev.rst" "utils/versionutils.py" "utils/build-deb" "utils/install-git-hooks" @@ -65,7 +68,7 @@ "git-hooks/post-commit" "git-hooks/post-merge" "git-hooks/pre-commit" - ".gitignore"] + ] plain-files ["utils/__init__.py" "utils/choose_default_python.sh" "utils/virtualenv-15.1.0/virtualenv.py" @@ -88,6 +91,7 @@ (apply ->files data (concat (map (fn [f] [f ""]) empty-files) + (map (fn [f] [(str "." f) (render f data)]) dot-template-files) (map (fn [f] [f (render f data)]) template-files) (map (fn [f] [(str "{{python-pkg-name}}/" f) (render f data)]) package-files) (map (fn [f] [f (io/input-stream (get-template-file f))]) diff --git a/src/leiningen/new/python/README-dev.rst b/src/leiningen/new/python/README-dev.rst new file mode 100644 index 0000000..895485d --- /dev/null +++ b/src/leiningen/new/python/README-dev.rst @@ -0,0 +1,86 @@ +README for developers +========================== + +How to add configurable variables +---------------------------------------- + +User configurations can be defined in {{python-pkg-name}}/config.py + +Default config keys and values are defined in config.py. Runtime configs can +be read from config file or environment variable. Config file path is +specified in config.py. + +Config file format is: + +:: + + # empty line and comment line are ignored + key1=value1 + key2=value2 + +Every config key can be passed in as environment variable as well. The +environment variable name is by replace . (dot) and - (hyphen-minus) by _ +(underscore), then all upper case. For example, db.host env variable should be +DB_HOST. If the same key is defined in more than one place, env var > file +config > default config. + +To use config variable in code, + +.. code-block:: python + + from {{python-pkg-name}}.config import CONF + + CONF.getstr('some.key') + CONF.getint('some.key') + CONF.getbool('some.key') + CONF.getfloat('some.key') + + +How to run tests and deploy projects +----------------------------------------- + +- In dev environment, + + .. code-block:: bash + + make test + make run + +- In production, deploy via deb file, + + update scripts in deb-scripts/ + + install fpm the package builder. see https://github.com/jordansissel/fpm + install fabric tool. see http://www.fabfile.org/ + + .. code-block:: bash + + make test + make deb + fab deploy + +- In production, deploy via kubernetes and docker image. + + in Makefile, update DOCKER_IMAGE_PREFIX and BUILD_DOCKER_IMAGE if necessary, + default template use my private docker reg. + + Run test in docker container and build docker image: + + define DOCKER_USER and DOCKER_PASSWORD env variable. + + .. code-block:: bash + + make ci-build + + Deploy in kubernetes cluster: + + define KUBECTL_API and KUBECTL_TOKEN env variable. + + .. code-block:: bash + + make deploy + + default template use ingress to provide https access to the service. In + other environment, the app.yaml template should be updated to fit in the + environment. + diff --git a/src/leiningen/new/python/.gitignore b/src/leiningen/new/python/gitignore similarity index 100% rename from src/leiningen/new/python/.gitignore rename to src/leiningen/new/python/gitignore -- GitLab